diff --git a/100_core/src_000_err/gplx/Err_.java b/100_core/src_000_err/gplx/Err_.java
index edc933e43..281b0e683 100644
--- a/100_core/src_000_err/gplx/Err_.java
+++ b/100_core/src_000_err/gplx/Err_.java
@@ -24,7 +24,8 @@ public class Err_ { //_20110415
public static Err new_(String hdr) {return Err.hdr_(hdr);}
public static Err new_key_(String key, String hdr) {return Err.hdr_(hdr).Key_(key);}
public static Err err_key_(Exception exc, String key, String hdr) {return Err.exc_(exc, hdr).Key_(key);}
- public static Err err_(Exception exc, String hdr) {return Err.exc_(exc, hdr);}
+ public static Err err_(Exception e) {return Err.exc_(e, Message_gplx_brief(e));}
+ public static Err err_(Exception e, String hdr) {return Err.exc_(e, hdr);}
public static Err err_(Exception e, String fmt, Object... args) {return Err.exc_(e, String_.Format(fmt, args));}
public static Err cast_(Exception ignore, Class> t, Object o) {
String o_str = "";
diff --git a/100_core/src_110_primitive/gplx/Array_.java b/100_core/src_110_primitive/gplx/Array_.java
index 1cbefc47c..ae116add6 100644
--- a/100_core/src_110_primitive/gplx/Array_.java
+++ b/100_core/src_110_primitive/gplx/Array_.java
@@ -50,11 +50,16 @@ public class Array_ {
rv[i + newLen] = cur[i];
return rv;
}
- public static Object Resize(Object src, int trgLen) {
- Object trg = Create(ComponentType(src), trgLen);
- int srcLen = Array.getLength(src);
- int copyLen = srcLen > trgLen ? trgLen : srcLen; // trgLen can either expand or shrink
- CopyTo(src, 0, trg, 0, copyLen);
+ public static Object Resize_add_one(Object src, int src_len, Object new_obj) {
+ Object rv = Resize(src, src_len + 1);
+ Set(rv, src_len, new_obj);
+ return rv;
+ }
+ public static Object Resize(Object src, int trg_len) {
+ Object trg = Create(ComponentType(src), trg_len);
+ int src_len = Array.getLength(src);
+ int copy_len = src_len > trg_len ? trg_len : src_len; // trg_len can either expand or shrink
+ CopyTo(src, 0, trg, 0, copy_len);
return trg;
}
public static String XtoStr(Object ary) {
diff --git a/100_core/src_110_primitive/gplx/Bry_bfr.java b/100_core/src_110_primitive/gplx/Bry_bfr.java
index 744b99cc8..0d7b57691 100644
--- a/100_core/src_110_primitive/gplx/Bry_bfr.java
+++ b/100_core/src_110_primitive/gplx/Bry_bfr.java
@@ -18,26 +18,50 @@ along with this program. If not, see .
package gplx;
import gplx.core.primitives.*;
public class Bry_bfr {
+ private Bry_bfr_mkr_mgr mkr_mgr; private int reset;
public byte[] Bfr() {return bfr;} private byte[] bfr;
- @gplx.Internal protected int Bfr_max() {return bfr_max;} private int bfr_max;
public int Len() {return bfr_len;} private int bfr_len;
public boolean Len_eq_0() {return bfr_len == 0;}
public boolean Len_gt_0() {return bfr_len > 0;}
public void Bfr_init(byte[] bfr, int bfr_len) {
- this.bfr = bfr;
- this.bfr_len = bfr_len;
- this.bfr_max = bfr.length; // NOTE: must sync bfr_max, else will fail later during add; bfr will think bfr has .length of bfr_max, when it actually has .length of bfr_len; DATE:2014-03-09
+ synchronized (this) {
+ this.bfr = bfr;
+ this.bfr_len = bfr_len;
+ this.bfr_max = bfr.length; // NOTE: must sync bfr_max, else will fail later during add; bfr will think bfr has .length of bfr_max, when it actually has .length of bfr_len; DATE:2014-03-09
+ }
}
- @gplx.Internal protected int Mkr_itm() {return mkr_itm;} private int mkr_itm = -1;
- @gplx.Internal protected Bry_bfr_mkr_mgr Mkr_mgr() {return mkr_mgr;} Bry_bfr_mkr_mgr mkr_mgr;
- @gplx.Internal protected Bry_bfr Mkr_(Bry_bfr_mkr_mgr mkr_mgr, int itm) {this.mkr_mgr = mkr_mgr; this.mkr_itm = itm; return this;}
- public Bry_bfr Mkr_rls() {mkr_mgr.Rls(this); return this;}
- private void Mkr_clear() {
- if (mkr_mgr != null) mkr_mgr.Rls(this);
- mkr_mgr = null;
- mkr_itm = -1;
+ public Bry_bfr Mkr_rls() {
+ if (mkr_mgr != null) {
+ synchronized (mkr_mgr) {
+ mkr_mgr.Rls(mkr_idx);
+ }
+ synchronized (this) {
+ this.mkr_mgr = null;
+ this.mkr_idx = -1;
+ }
+ }
+ return this;
}
- private Bry_bfr Reset_(int v) {reset = v; return this;} private int reset;
+ public void Clear_and_rls() {
+ this.Clear();
+ this.Mkr_rls();
+ }
+ public String To_str_and_rls() {return String_.new_utf8_(To_bry_and_rls());}
+ public byte[] To_bry_and_rls() {
+ byte[] rv = null;
+ synchronized (bfr) {
+ rv = Xto_bry();
+ this.Clear();
+ if (reset > 0) Reset_if_gt(reset);
+ synchronized (mkr_mgr) {
+ mkr_mgr.Rls(mkr_idx);
+ }
+ mkr_mgr = null;
+ mkr_idx = -1;
+ }
+ return rv;
+ }
+ private Bry_bfr Reset_(int v) {reset = v; return this;}
public Bry_bfr Reset_if_gt(int limit) {
if (bfr_max > limit) {
this.bfr_max = limit;
@@ -46,7 +70,12 @@ public class Bry_bfr {
bfr_len = 0;
return this;
}
- public Bry_bfr Clear() {bfr_len = 0; return this;}
+ public Bry_bfr Clear() {
+ synchronized (this) {
+ this.bfr_len = 0;
+ }
+ return this;
+ }
public Bry_bfr ClearAndReset() {bfr_len = 0; if (reset > 0) Reset_if_gt(reset); return this;}
public byte Get_at_last_or_nil_if_empty() {return bfr_len == 0 ? Byte_ascii.Nil : bfr[bfr_len - 1];}
public Bry_bfr Add_safe(byte[] val) {return val == null ? this : Add(val);}
@@ -491,7 +520,7 @@ public class Bry_bfr {
}
public void Rls() {
bfr = null;
- Mkr_clear();
+ this.Mkr_rls();
}
@Override public int hashCode() {return Bry_obj_ref.CalcHashCode(bfr, 0, bfr_len);}
@Override public boolean equals(Object obj) {return obj == null ? false : Bry_.Match(bfr, 0, bfr_len, ((Bry_obj_ref)obj).Val());} // NOTE: strange, but null check needed; throws null error; PAGE:c:File:Eug�ne_Delacroix_-_La_libert�_guidant_le_peuple.jpg
@@ -499,6 +528,15 @@ public class Bry_bfr {
bfr_max = v;
bfr = Bry_.Resize(bfr, 0, v);
}
+ @gplx.Internal protected int Mkr_idx() {return mkr_idx;} private int mkr_idx = -1;
+ @gplx.Internal protected boolean Mkr_idx_is_null() {return mkr_idx == -1;}
+ @gplx.Internal protected int Bfr_max() {return bfr_max;} private int bfr_max;
+ @gplx.Internal protected Bry_bfr Mkr_init(Bry_bfr_mkr_mgr mkr_mgr, int itm) {
+ synchronized (this) {
+ this.mkr_mgr = mkr_mgr; this.mkr_idx = itm;
+ }
+ return this;
+ }
public static Bry_bfr new_() {return new Bry_bfr(16);}
public static Bry_bfr new_(int v) {return new Bry_bfr(v);}
public static Bry_bfr reset_(int v) {return new Bry_bfr(16).Reset_(v);} // PERF: set initial size to 16, not reset val; allows for faster "startup"; DATE:2014-06-14
diff --git a/100_core/src_110_primitive/gplx/Bry_bfr_mkr.java b/100_core/src_110_primitive/gplx/Bry_bfr_mkr.java
index dced6ae7f..93842c0f4 100644
--- a/100_core/src_110_primitive/gplx/Bry_bfr_mkr.java
+++ b/100_core/src_110_primitive/gplx/Bry_bfr_mkr.java
@@ -24,7 +24,8 @@ public class Bry_bfr_mkr {
public Bry_bfr Get_k004() {return mkr_k004.Get();}
public Bry_bfr Get_m001() {return mkr_m001.Get();}
public void Rls(Bry_bfr v) {
- v.Mkr_mgr().Rls(v);
+ v.Mkr_rls();
+// v.Mkr_mgr().Rls(v);
}
public void Reset_if_gt(int v) {
for (byte i = Tid_b128; i <= Tid_m001; i++)
@@ -71,7 +72,7 @@ class Bry_bfr_mkr_mgr {
for (int i = 0; i < ary_max; i++) {
Bry_bfr itm = ary[i];
if (itm != null) {
- if (itm.Mkr_mgr() != null) throw Err_.new_("failed to clear bfr: " + Int_.Xto_str(i));
+ if (!itm.Mkr_idx_is_null()) throw Err_.new_("failed to clear bfr: " + Int_.Xto_str(i));
itm.Clear();
}
ary[i] = null;
@@ -117,7 +118,7 @@ class Bry_bfr_mkr_mgr {
ary[rv_idx] = rv;
}
}
- rv.Mkr_(this, rv_idx);
+ rv.Mkr_init(this, rv_idx);
return rv.Clear(); // NOTE: ALWAYS call Clear when doing Get. caller may forget to call Clear, and reused bfr may have leftover bytes. unit tests will not catch, and difficult to spot in app
}
}
@@ -131,16 +132,26 @@ class Bry_bfr_mkr_mgr {
Array_.CopyTo(free, 0, new_free, 0, free_len);
free = new_free;
}
- public void Rls(Bry_bfr v) {
+// public void Rls(Bry_bfr v) {
+// synchronized (thread_lock) {
+// int idx = v.Mkr_itm();
+// if (idx == -1) throw Err_mgr._.fmt_("gplx.Bry_bfr", "rls_failed", "rls called on bfr that was not created by factory");
+// int new_ary_len = nxt_idx - 1;
+// if (idx == new_ary_len)
+// nxt_idx = new_ary_len;
+// else
+// free[free_len++] = idx;
+// v.Mkr_(null, -1);
+// }
+// }
+ public void Rls(int idx) {
synchronized (thread_lock) {
- int idx = v.Mkr_itm();
if (idx == -1) throw Err_mgr._.fmt_("gplx.Bry_bfr", "rls_failed", "rls called on bfr that was not created by factory");
int new_ary_len = nxt_idx - 1;
if (idx == new_ary_len)
nxt_idx = new_ary_len;
else
free[free_len++] = idx;
- v.Mkr_(null, -1);
}
}
public static final Bry_bfr[] Ary_empty = new Bry_bfr[0];
diff --git a/100_core/src_110_primitive/gplx/Bry_bfr_mkr_tst.java b/100_core/src_110_primitive/gplx/Bry_bfr_mkr_tst.java
index 475ecfe28..2cb5e3ef0 100644
--- a/100_core/src_110_primitive/gplx/Bry_bfr_mkr_tst.java
+++ b/100_core/src_110_primitive/gplx/Bry_bfr_mkr_tst.java
@@ -56,7 +56,7 @@ class Bry_bfr_mkr_fxt {
}
public Bry_bfr_mkr_fxt Rls(int i) {
Bry_bfr bfr = mkr.Ary()[i];
- mkr.Rls(bfr);
+ bfr.Mkr_rls();
return this;
}
public Bry_bfr_mkr_fxt Tst_idxs(int... expd) {
@@ -65,7 +65,7 @@ class Bry_bfr_mkr_fxt {
for (int i = 0; i < actl_len; i++) {
Bry_bfr bfr = mkr.Ary()[i];
int actl_val = Bry_bfr_mkr_tst.Int_null;
- if (bfr != null) actl_val = bfr.Mkr_itm();
+ if (bfr != null) actl_val = bfr.Mkr_idx();
actl[i] = actl_val;
}
Tfds.Eq_ary(expd, actl);
diff --git a/100_core/src_110_primitive/gplx/Int_.java b/100_core/src_110_primitive/gplx/Int_.java
index fdcb9e1d8..f6f312a7c 100644
--- a/100_core/src_110_primitive/gplx/Int_.java
+++ b/100_core/src_110_primitive/gplx/Int_.java
@@ -134,9 +134,9 @@ public class Int_ implements GfoInvkAble {
if (val < 0) throw Err_.new_("key must be >= 0").Add("key", key).Add("val", val);
return this;
}
- public static String Xto_str_pad_bgn_space(int v, int reqdPlaces) {return Xto_str_pad_bgn(v, reqdPlaces, Byte_ascii.Space, true);} // EX: 1, 3 returns " 1"
- public static String Xto_str_pad_bgn(int v, int reqdPlaces) {return Xto_str_pad_bgn(v, reqdPlaces, Byte_ascii.Num_0, true);} // EX: 1, 3 returns "001"
- static String Xto_str_pad_bgn(int val, int places, byte pad_chr, boolean bgn) {
+ public static String Xto_str_pad_bgn_space(int v, int reqdPlaces) {return Xto_str_pad_bgn_zero(v, reqdPlaces, Byte_ascii.Space, true);} // EX: 1, 3 returns " 1"
+ public static String Xto_str_pad_bgn_zero(int v, int reqdPlaces) {return Xto_str_pad_bgn_zero(v, reqdPlaces, Byte_ascii.Num_0, true);} // EX: 1, 3 returns "001"
+ static String Xto_str_pad_bgn_zero(int val, int places, byte pad_chr, boolean bgn) {
int len = DigitCount(val);
int pad_len = places - len; if (pad_len < 0) return Int_.Xto_str(val);
Bry_bfr bfr = Bry_bfr.new_();
@@ -165,7 +165,7 @@ public class Int_ implements GfoInvkAble {
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_XtoStr_PadBgn)) {
int v = m.ReadInt(GfsCore_.Arg_primitive), pad = m.ReadInt("pad");
- return ctx.Deny() ? (Object)this : Xto_str_pad_bgn(v, pad);
+ return ctx.Deny() ? (Object)this : Xto_str_pad_bgn_zero(v, pad);
}
else if (ctx.Match(k, "Add")) {
int v = m.ReadInt(GfsCore_.Arg_primitive), operand = m.ReadInt("operand");
@@ -204,10 +204,11 @@ public class Int_ implements GfoInvkAble {
if (rvLen < 8) rv = String_.Repeat("0", 8 - rvLen) + rv;
return String_.Upper(rv);
}
- public static String Xto_str(int[] ary) {
+ public static String Xto_str(int[] ary) {return Xto_str(ary, " ");}
+ public static String Xto_str(int[] ary, String dlm) {
String_bldr sb = String_bldr_.new_();
for (int i = 0; i < ary.length; i++)
- sb.Add_spr_unless_first(Int_.Xto_str(ary[i]), " ", i);
+ sb.Add_spr_unless_first(Int_.Xto_str(ary[i]), dlm, i);
return sb.XtoStr();
}
public static int[] Ary_parse(String raw_str, int reqd_len, int[] or) {
diff --git a/100_core/src_110_primitive/gplx/Int__tst.java b/100_core/src_110_primitive/gplx/Int__tst.java
index 23402ac51..6621bef94 100644
--- a/100_core/src_110_primitive/gplx/Int__tst.java
+++ b/100_core/src_110_primitive/gplx/Int__tst.java
@@ -26,7 +26,7 @@ public class Int__tst {
tst_XtoStr_PadLeft_Zeroes(-12 , 3, "-12"); // negative
tst_XtoStr_PadLeft_Zeroes(-123 , 3, "-123"); // negative
tst_XtoStr_PadLeft_Zeroes(-1234 , 3, "-1234"); // negative
- } void tst_XtoStr_PadLeft_Zeroes(int val, int zeros, String expd) {Tfds.Eq(expd, Int_.Xto_str_pad_bgn(val, zeros));}
+ } void tst_XtoStr_PadLeft_Zeroes(int val, int zeros, String expd) {Tfds.Eq(expd, Int_.Xto_str_pad_bgn_zero(val, zeros));}
@Test public void parseOr_() {
tst_ParseOr("", -1); // empty
tst_ParseOr("123", 123); // single
diff --git a/100_core/src_120_basicDataType/gplx/DateAdp_.java b/100_core/src_120_basicDataType/gplx/DateAdp_.java
index 03eecaa31..5ef8c7c63 100644
--- a/100_core/src_120_basicDataType/gplx/DateAdp_.java
+++ b/100_core/src_120_basicDataType/gplx/DateAdp_.java
@@ -25,6 +25,7 @@ import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.TimeZone;
public class DateAdp_ implements GfoInvkAble {
+ public static final String Cls_ref_name = "Date";
public static final Class> Cls_ref_type = DateAdp.class;
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_Now)) return Now();
diff --git a/100_core/src_120_basicDataType/gplx/UuidAdp.java b/100_core/src_120_basicDataType/gplx/Guid_adp.java
similarity index 87%
rename from 100_core/src_120_basicDataType/gplx/UuidAdp.java
rename to 100_core/src_120_basicDataType/gplx/Guid_adp.java
index 3e53f76a7..04822f682 100644
--- a/100_core/src_120_basicDataType/gplx/UuidAdp.java
+++ b/100_core/src_120_basicDataType/gplx/Guid_adp.java
@@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx;
-public class UuidAdp {
+public class Guid_adp {
public String XtoStr() {return guid.toString();}
- public UuidAdp(java.util.UUID guid) {this.guid = guid;} java.util.UUID guid;
+ public Guid_adp(java.util.UUID guid) {this.guid = guid;} java.util.UUID guid;
}
\ No newline at end of file
diff --git a/100_core/src_120_basicDataType/gplx/UuidAdp_.java b/100_core/src_120_basicDataType/gplx/Guid_adp_.java
similarity index 67%
rename from 100_core/src_120_basicDataType/gplx/UuidAdp_.java
rename to 100_core/src_120_basicDataType/gplx/Guid_adp_.java
index b26766cc7..3f4faf732 100644
--- a/100_core/src_120_basicDataType/gplx/UuidAdp_.java
+++ b/100_core/src_120_basicDataType/gplx/Guid_adp_.java
@@ -16,8 +16,9 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx;
-public class UuidAdp_ {
- public static final UuidAdp Null = parse_("00000000-0000-0000-0000-000000000000");
- public static UuidAdp random_() {return new UuidAdp(java.util.UUID.randomUUID());}
- public static UuidAdp parse_(String s) {return new UuidAdp(java.util.UUID.fromString(s));}
+public class Guid_adp_ {
+ public static final String Cls_ref_name = "Guid";
+ public static final Guid_adp Empty = parse_("00000000-0000-0000-0000-000000000000");
+ public static Guid_adp random_() {return new Guid_adp(java.util.UUID.randomUUID());}
+ public static Guid_adp parse_(String s) {return new Guid_adp(java.util.UUID.fromString(s));}
}
\ No newline at end of file
diff --git a/100_core/src_120_basicDataType/gplx/UuidAdp__tst.java b/100_core/src_120_basicDataType/gplx/Guid_adp__tst.java
similarity index 91%
rename from 100_core/src_120_basicDataType/gplx/UuidAdp__tst.java
rename to 100_core/src_120_basicDataType/gplx/Guid_adp__tst.java
index d11a6c071..e3c11cb66 100644
--- a/100_core/src_120_basicDataType/gplx/UuidAdp__tst.java
+++ b/100_core/src_120_basicDataType/gplx/Guid_adp__tst.java
@@ -17,12 +17,12 @@ along with this program. If not, see .
*/
package gplx;
import org.junit.*;
-public class UuidAdp__tst {
+public class Guid_adp__tst {
@Test public void parse_() {
tst_parse_("467ffb41-cdfe-402f-b22b-be855425784b");
}
void tst_parse_(String s) {
- UuidAdp uuid = UuidAdp_.parse_(s);
+ Guid_adp uuid = Guid_adp_.parse_(s);
Tfds.Eq(uuid.XtoStr(), s);
}
}
diff --git a/100_core/src_120_basicDataType/gplx/TimeSpanAdp_.java b/100_core/src_120_basicDataType/gplx/TimeSpanAdp_.java
index 3d421add5..cef7314d3 100644
--- a/100_core/src_120_basicDataType/gplx/TimeSpanAdp_.java
+++ b/100_core/src_120_basicDataType/gplx/TimeSpanAdp_.java
@@ -116,7 +116,7 @@ public class TimeSpanAdp_ {
zeros = first && !fmt_padZeros ? 1 : padZerosAry[i]; // if first, don't zero pad (avoid "01")
dlm = first ? "" : Sprs[i]; // if first, don't use dlm (avoid ":01")
sb.Add(dlm);
- sb.Add(Int_.Xto_str_pad_bgn(val, zeros));
+ sb.Add(Int_.Xto_str_pad_bgn_zero(val, zeros));
first = false;
}
return sb.XtoStr();
diff --git a/100_core/src_120_basicDataType/gplx/Yn.java b/100_core/src_120_basicDataType/gplx/Yn.java
index 08ca4de48..2839174ee 100644
--- a/100_core/src_120_basicDataType/gplx/Yn.java
+++ b/100_core/src_120_basicDataType/gplx/Yn.java
@@ -18,6 +18,11 @@ along with this program. If not, see .
package gplx;
public class Yn {
public static final String Y = "y", N = "n";
+ public static boolean parse_by_char_or(String v, boolean or) {
+ if (String_.Eq(v, Y)) return true;
+ else if (String_.Eq(v, N)) return false;
+ else return or;
+ }
public static boolean parse_or_n_(String v) {return parse_or_(v, false);}
public static int parse_as_int(String v) {
if (v == null) return Bool_.__int;
diff --git a/100_core/src_140_list/gplx/OrderedHash_base.java b/100_core/src_140_list/gplx/OrderedHash_base.java
index a1a7f0fea..08a85c83d 100644
--- a/100_core/src_140_list/gplx/OrderedHash_base.java
+++ b/100_core/src_140_list/gplx/OrderedHash_base.java
@@ -65,7 +65,7 @@ public class OrderedHash_base extends HashAdp_base implements OrderedHash, GfoIn
int count = ordered.Count();
int pad = String_.Len(Int_.Xto_str(count));
for (int i = 0; i < count; i++) {
- sb .Add(Int_.Xto_str_pad_bgn(i, pad))
+ sb .Add(Int_.Xto_str_pad_bgn_zero(i, pad))
.Add(":").Add(ordered.FetchAt(i).toString())
.Add(Op_sys.Cur().Nl_str());
}
diff --git a/100_core/src_200_io/gplx/Io_mgr.java b/100_core/src_200_io/gplx/Io_mgr.java
index 326c58d42..bd3ba94d5 100644
--- a/100_core/src_200_io/gplx/Io_mgr.java
+++ b/100_core/src_200_io/gplx/Io_mgr.java
@@ -50,6 +50,10 @@ public class Io_mgr { // exists primarily to gather all cmds under gplx namespac
}
return false;
}
+ public void Create_fil_ary(Io_fil[] fil_ary) {
+ for (Io_fil fil : fil_ary)
+ SaveFilStr(fil.Url(), fil.Data());
+ }
public Io_url[] QueryDir_fils(Io_url dir) {return QueryDir_args(dir).ExecAsUrlAry();}
public IoEngine_xrg_queryDir QueryDir_args(Io_url dir) {return IoEngine_xrg_queryDir.new_(dir);}
public void DeleteDirSubs(Io_url url) {IoEngine_xrg_deleteDir.new_(url).Exec();}
@@ -133,5 +137,6 @@ public class Io_mgr { // exists primarily to gather all cmds under gplx namespac
public IoEngine_xrg_downloadFil DownloadFil_args(String src, Io_url trg) {return IoEngine_xrg_downloadFil.new_(src, trg);}
public static final Io_mgr _ = new Io_mgr(); public Io_mgr() {}
public static final int Len_kb = 1024, Len_mb = 1048576, Len_gb = 1073741824, Len_gb_2 = 2147483647;
+ public static final long Len_mb_long = Len_mb;
public static final long Len_null = -1;
}
diff --git a/100_core/src_200_io/gplx/ios/IoEngine_system.java b/100_core/src_200_io/gplx/ios/IoEngine_system.java
index 7c3a65148..2f10e2125 100644
--- a/100_core/src_200_io/gplx/ios/IoEngine_system.java
+++ b/100_core/src_200_io/gplx/ios/IoEngine_system.java
@@ -542,7 +542,7 @@ class Io_stream_rdr_http implements Io_stream_rdr {
public Io_stream_rdr_http(IoEngine_xrg_downloadFil xrg) {
this.xrg = xrg;
} private IoEngine_xrg_downloadFil xrg;
- public byte Tid() {return Io_stream_.Tid_file;}
+ public byte Tid() {return Io_stream_.Tid_raw;}
public Io_url Url() {return url;} public Io_stream_rdr Url_(Io_url v) {url = v; return this;} private Io_url url;
public long Len() {return len;} public Io_stream_rdr Len_(long v) {len = v; return this;} private long len = IoItmFil.Size_invalid; // NOTE: must default size to -1; DATE:2014-06-21
private String src_str; private HttpURLConnection src_conn; private java.io.BufferedInputStream src_stream;
diff --git a/100_core/src_200_io/gplx/ios/IoEngine_xrg_recycleFil.java b/100_core/src_200_io/gplx/ios/IoEngine_xrg_recycleFil.java
index 8c77f2665..5d81a4e79 100644
--- a/100_core/src_200_io/gplx/ios/IoEngine_xrg_recycleFil.java
+++ b/100_core/src_200_io/gplx/ios/IoEngine_xrg_recycleFil.java
@@ -22,7 +22,7 @@ public class IoEngine_xrg_recycleFil extends IoEngine_xrg_fil_affects1_base {
public int Mode() {return mode;} public IoEngine_xrg_recycleFil Mode_(int v) {mode = v; return this;} int mode;
public String AppName() {return appName;} public IoEngine_xrg_recycleFil AppName_(String val) {appName = val; return this;} private String appName = "unknown_app";
- public UuidAdp Uuid() {return uuid;} public IoEngine_xrg_recycleFil Uuid_(UuidAdp val) {uuid = val; return this;} UuidAdp uuid;
+ public Guid_adp Uuid() {return uuid;} public IoEngine_xrg_recycleFil Uuid_(Guid_adp val) {uuid = val; return this;} Guid_adp uuid;
public boolean Uuid_include() {return uuid_include;} public IoEngine_xrg_recycleFil Uuid_include_() {uuid_include = true; return this;} private boolean uuid_include;
public DateAdp Time() {return time;} public IoEngine_xrg_recycleFil Time_(DateAdp val) {time = val; return this;} DateAdp time;
public ListAdp RootDirNames() {return rootDirNames;} public IoEngine_xrg_recycleFil RootDirNames_(ListAdp val) {rootDirNames = val; return this;} ListAdp rootDirNames;
@@ -49,7 +49,7 @@ public class IoEngine_xrg_recycleFil extends IoEngine_xrg_fil_affects1_base {
public IoEngine_xrg_recycleFil(int v) {
mode = v;
time = DateAdp_.Now();
- uuid = UuidAdp_.random_();
+ uuid = Guid_adp_.random_();
rootDirNames = ListAdp_.new_(); rootDirNames.Add("z_trash");
}
public static IoEngine_xrg_recycleFil sysm_(Io_url url) {return new IoEngine_xrg_recycleFil(SysmConst);}
diff --git a/400_xowa/src_040_io/gplx/ios/Io_fil.java b/100_core/src_200_io/gplx/ios/Io_fil.java
similarity index 100%
rename from 400_xowa/src_040_io/gplx/ios/Io_fil.java
rename to 100_core/src_200_io/gplx/ios/Io_fil.java
diff --git a/400_xowa/src/gplx/dbs/Gfdb_db_base.java b/100_core/src_200_io/gplx/ios/Io_fil_mkr.java
similarity index 65%
rename from 400_xowa/src/gplx/dbs/Gfdb_db_base.java
rename to 100_core/src_200_io/gplx/ios/Io_fil_mkr.java
index 3a75dfb8a..b1daf5b2f 100644
--- a/400_xowa/src/gplx/dbs/Gfdb_db_base.java
+++ b/100_core/src_200_io/gplx/ios/Io_fil_mkr.java
@@ -15,13 +15,10 @@ 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 .
*/
-package gplx.dbs; import gplx.*;
-import gplx.dbs.schemas.*;
-public class Gfdb_db_base {
- public Db_conn Conn() {return conn;} private Db_conn conn;
- public Schema_db_mgr Schema() {return schema;} private Schema_db_mgr schema = new Schema_db_mgr();
- public void Init(Db_conn conn) {
- this.conn = conn;
- schema.Init(conn);
- }
+package gplx.ios; import gplx.*;
+public class Io_fil_mkr {
+ private final ListAdp list = ListAdp_.new_();
+ public Io_fil_mkr Add(String url, String data) {return Add(Io_url_.mem_fil_(url), data);}
+ public Io_fil_mkr Add(Io_url url, String data) {list.Add(new Io_fil(url, data)); return this;}
+ public Io_fil[] To_ary() {return (Io_fil[])list.Xto_ary(Io_fil.class);}
}
diff --git a/100_core/src_200_io/gplx/ios/Io_size_.java b/100_core/src_200_io/gplx/ios/Io_size_.java
index 7c374fc12..e3a94059f 100644
--- a/100_core/src_200_io/gplx/ios/Io_size_.java
+++ b/100_core/src_200_io/gplx/ios/Io_size_.java
@@ -91,6 +91,9 @@ public class Io_size_ {
long rv = parse_or_(v, Long_.MinValue); if (rv == Long_.MinValue) throw Err_.new_fmt_("invalid val: {0}", v);
return rv;
}
+ public static String To_str_mb(long v) {return Long_.Xto_str(v / Io_mgr.Len_mb_long);}
+ public static long To_long_by_msg_mb(GfoMsg m) {return m.ReadLong("v") * Io_mgr.Len_mb_long;}
+ public static long To_long_by_int_mb(int v) {return (long)v * Io_mgr.Len_mb_long;}
}
class Io_size_fmtr_arg implements Bry_fmtr_arg {
public long Val() {return val;} public Io_size_fmtr_arg Val_(long v) {val = v; return this;} long val;
diff --git a/100_core/src_200_io/gplx/ios/Io_stream_.java b/100_core/src_200_io/gplx/ios/Io_stream_.java
index d9006d71c..61b603720 100644
--- a/100_core/src_200_io/gplx/ios/Io_stream_.java
+++ b/100_core/src_200_io/gplx/ios/Io_stream_.java
@@ -17,6 +17,39 @@ along with this program. If not, see .
*/
package gplx.ios; import gplx.*;
public class Io_stream_ { // SERIALIZED
- public static final byte Tid_null = 0, Tid_file = 1, Tid_zip = 2, Tid_gzip = 3, Tid_bzip2 = 4;
+ public static final byte Tid_null = 0, Tid_raw = 1, Tid_zip = 2, Tid_gzip = 3, Tid_bzip2 = 4;
public static final String Ext_zip = ".zip", Ext_gz = ".gz", Ext_bz2 = ".bz2";
+
+ public static String Obsolete_to_str(byte v) {
+ switch (v) {
+ case Io_stream_.Tid_raw : return ".xdat";
+ case Io_stream_.Tid_zip : return ".zip";
+ case Io_stream_.Tid_gzip : return ".gz";
+ case Io_stream_.Tid_bzip2 : return ".bz2";
+ default : throw Err_.unhandled(v);
+ }
+ }
+ public static byte Obsolete_to_tid(String v) {
+ if (String_.Eq(v, ".xdat")) return Io_stream_.Tid_raw;
+ else if (String_.Eq(v, ".zip")) return Io_stream_.Tid_zip;
+ else if (String_.Eq(v, ".gz")) return Io_stream_.Tid_gzip;
+ else if (String_.Eq(v, ".bz2")) return Io_stream_.Tid_bzip2;
+ else throw Err_.unhandled(v);
+ }
+ public static String To_str(byte v) {
+ switch (v) {
+ case Io_stream_.Tid_raw : return "raw";
+ case Io_stream_.Tid_zip : return "zip";
+ case Io_stream_.Tid_gzip : return "gzip";
+ case Io_stream_.Tid_bzip2 : return "bzip2";
+ default : throw Err_.unhandled(v);
+ }
+ }
+ public static byte To_tid(String v) {
+ if (String_.Eq(v, "raw")) return Io_stream_.Tid_raw;
+ else if (String_.Eq(v, "zip")) return Io_stream_.Tid_zip;
+ else if (String_.Eq(v, "gzip")) return Io_stream_.Tid_gzip;
+ else if (String_.Eq(v, "bzip2")) return Io_stream_.Tid_bzip2;
+ else throw Err_.unhandled(v);
+ }
}
diff --git a/100_core/src_200_io/gplx/ios/Io_stream_rdr_.java b/100_core/src_200_io/gplx/ios/Io_stream_rdr_.java
index 56748563d..ce28d9d14 100644
--- a/100_core/src_200_io/gplx/ios/Io_stream_rdr_.java
+++ b/100_core/src_200_io/gplx/ios/Io_stream_rdr_.java
@@ -31,7 +31,7 @@ public class Io_stream_rdr_ {
}
public static Io_stream_rdr new_by_tid_(byte tid) {
switch (tid) {
- case Io_stream_.Tid_file: return new Io_stream_rdr_file();
+ case Io_stream_.Tid_raw: return new Io_stream_rdr_file();
case Io_stream_.Tid_zip: return new Io_stream_rdr_zip();
case Io_stream_.Tid_gzip: return new Io_stream_rdr_gzip();
case Io_stream_.Tid_bzip2: return new Io_stream_rdr_bzip2();
@@ -124,7 +124,7 @@ class Io_stream_rdr_adp implements Io_stream_rdr {
private java.io.InputStream strm;
public Io_stream_rdr_adp(java.io.InputStream strm) {this.strm = strm;}
public Object Under() {return strm;}
- public byte Tid() {return Io_stream_.Tid_file;}
+ public byte Tid() {return Io_stream_.Tid_raw;}
public Io_url Url() {return url;} public Io_stream_rdr Url_(Io_url v) {this.url = v; return this;} private Io_url url;
public long Len() {return len;} public Io_stream_rdr Len_(long v) {len = v; return this;} private long len = Io_mgr.Len_null;
public void Open_mem(byte[] v) {}
@@ -172,7 +172,7 @@ abstract class Io_stream_rdr_base implements Io_stream_rdr {
public abstract java.io.InputStream Wrap_stream(java.io.InputStream stream);
}
class Io_stream_rdr_file extends Io_stream_rdr_base {
- @Override public byte Tid() {return Io_stream_.Tid_file;}
+ @Override public byte Tid() {return Io_stream_.Tid_raw;}
public Io_stream_rdr Open() {
try {
if (!Io_mgr._.Exists(url))
diff --git a/100_core/src_200_io/gplx/ios/Io_stream_wtr_.java b/100_core/src_200_io/gplx/ios/Io_stream_wtr_.java
index 7f2cf1154..0f097907a 100644
--- a/100_core/src_200_io/gplx/ios/Io_stream_wtr_.java
+++ b/100_core/src_200_io/gplx/ios/Io_stream_wtr_.java
@@ -35,7 +35,7 @@ public class Io_stream_wtr_ {
}
public static Io_stream_wtr new_by_tid_(byte v) {
switch (v) {
- case gplx.ios.Io_stream_.Tid_file : return new Io_stream_wtr_file();
+ case gplx.ios.Io_stream_.Tid_raw : return new Io_stream_wtr_file();
case gplx.ios.Io_stream_.Tid_zip : return new Io_stream_wtr_zip();
case gplx.ios.Io_stream_.Tid_gzip : return new Io_stream_wtr_gzip();
case gplx.ios.Io_stream_.Tid_bzip2 : return new Io_stream_wtr_bzip2();
@@ -172,7 +172,7 @@ class Io_stream_wtr_zip implements Io_stream_wtr {
}
class Io_stream_wtr_file implements Io_stream_wtr {
IoStream bry_stream;
- @Override public byte Tid() {return Io_stream_.Tid_file;}
+ @Override public byte Tid() {return Io_stream_.Tid_raw;}
public Io_url Url() {return url;} public Io_stream_wtr Url_(Io_url v) {url = v; return this;} Io_url url;
public void Trg_bfr_(Bry_bfr v) {trg_bfr = v;} private Bry_bfr trg_bfr; java.io.ByteArrayOutputStream mem_stream;
public Io_stream_wtr Open() {
diff --git a/100_core/src_210_env/gplx/Op_sys.java b/100_core/src_210_env/gplx/Op_sys.java
index 69d997aea..1c2bf9122 100644
--- a/100_core/src_210_env/gplx/Op_sys.java
+++ b/100_core/src_210_env/gplx/Op_sys.java
@@ -45,8 +45,14 @@ public class Op_sys {
public static final Op_sys Drd = new_unx_flavor_(Tid_drd, "windows", Bitness_32);
public static final Op_sys Wnt = new_wnt_(Sub_tid_unknown, Bitness_32);
public static Op_sys Cur() {return cur_op_sys;} static Op_sys cur_op_sys = new_auto_identify_();
- static Op_sys new_wnt_(byte bitness, byte sub_tid) {return new Op_sys(Tid_wnt , sub_tid , "windows", bitness, "\r\n", Byte_ascii.Backslash , Bool_.N, new byte[] {Byte_ascii.Slash, Byte_ascii.Backslash, Byte_ascii.Lt, Byte_ascii.Gt, Byte_ascii.Colon, Byte_ascii.Pipe, Byte_ascii.Question, Byte_ascii.Asterisk, Byte_ascii.Quote});}
- static Op_sys new_unx_flavor_(byte tid, String os_name, byte bitness) {return new Op_sys(tid , Sub_tid_unknown , os_name , bitness, "\n" , Byte_ascii.Slash , Bool_.Y, new byte[] {Byte_ascii.Slash});}
+ public static String Fsys_path_to_lnx(String v) {
+ return cur_op_sys.Tid_is_wnt() ? String_.Replace(v, Wnt.fsys_dir_spr_str, Lnx.fsys_dir_spr_str) : v;
+ }
+ public static String Fsys_path_to_wnt(String v) {
+ return cur_op_sys.Tid_is_wnt() ? String_.Replace(v, Lnx.fsys_dir_spr_str, Wnt.fsys_dir_spr_str) : v;
+ }
+ private static Op_sys new_wnt_(byte bitness, byte sub_tid) {return new Op_sys(Tid_wnt , sub_tid , "windows", bitness, "\r\n", Byte_ascii.Backslash , Bool_.N, new byte[] {Byte_ascii.Slash, Byte_ascii.Backslash, Byte_ascii.Lt, Byte_ascii.Gt, Byte_ascii.Colon, Byte_ascii.Pipe, Byte_ascii.Question, Byte_ascii.Asterisk, Byte_ascii.Quote});}
+ private static Op_sys new_unx_flavor_(byte tid, String os_name, byte bitness) {return new Op_sys(tid , Sub_tid_unknown , os_name , bitness, "\n" , Byte_ascii.Slash , Bool_.Y, new byte[] {Byte_ascii.Slash});}
static final String GRP_KEY = "gplx.op_sys";
// public static Op_sys Cur_() {cur_op_sys = new_auto_identify_(); return cur_op_sys;}
static Op_sys new_auto_identify_() {
diff --git a/100_core/src_420_usrMsg/gplx/Gfo_usr_dlg_.java b/100_core/src_420_usrMsg/gplx/Gfo_usr_dlg_.java
index 481336d4a..8b5bcdee6 100644
--- a/100_core/src_420_usrMsg/gplx/Gfo_usr_dlg_.java
+++ b/100_core/src_420_usrMsg/gplx/Gfo_usr_dlg_.java
@@ -17,7 +17,7 @@ along with this program. If not, see .
*/
package gplx;
public class Gfo_usr_dlg_ {
- public static Gfo_usr_dlg _ = Gfo_usr_dlg_null._;
+ public static Gfo_usr_dlg I = Gfo_usr_dlg_null._;
public static final Gfo_usr_dlg Null = Gfo_usr_dlg_null._;
}
class Gfo_usr_dlg_null implements Gfo_usr_dlg {
diff --git a/100_core/src_800_tst/gplx/Tfds.java b/100_core/src_800_tst/gplx/Tfds.java
index b1fb93d75..9047a7d08 100644
--- a/100_core/src_800_tst/gplx/Tfds.java
+++ b/100_core/src_800_tst/gplx/Tfds.java
@@ -207,14 +207,14 @@ class TfdsMsgBldr {
for (int i = 0; i < list.Count(); i++) {
TfdsEqAryItm itm = (TfdsEqAryItm)list.FetchAt(i);
sb.Add_fmt_line("{0}: {1} {2} {3}"
- , Int_.Xto_str_pad_bgn(itm.Idx(), 4)
+ , Int_.Xto_str_pad_bgn_zero(itm.Idx(), 4)
, String_.PadBgn(itm.Lhs(), lhsLenMax, " ")
, itm.Eq() ? "==" : "!="
, String_.PadBgn(itm.Rhs(), rhsLenMax, " ")
);
}
// String compSym = isEq ? " " : "!=";
-// String result = String_.Format("{0}: {1}{2} {3} {4}", Int_.Xto_str_pad_bgn(i, 4), lhsString, String_.CrLf + "\t\t", compSym, rhsString);
+// String result = String_.Format("{0}: {1}{2} {3} {4}", Int_.Xto_str_pad_bgn_zero(i, 4), lhsString, String_.CrLf + "\t\t", compSym, rhsString);
// foreach (Object obj in list) {
// String itmComparison = (String)obj;
// sb.Add_fmt_line("{0}{1}", "\t\t", itmComparison);
diff --git a/100_core/tst/gplx/ios/IoEngine_fil_basic_memory_tst.java b/100_core/tst/gplx/ios/IoEngine_fil_basic_memory_tst.java
index 1706c4f15..e0da42132 100644
--- a/100_core/tst/gplx/ios/IoEngine_fil_basic_memory_tst.java
+++ b/100_core/tst/gplx/ios/IoEngine_fil_basic_memory_tst.java
@@ -45,7 +45,7 @@ public class IoEngine_fil_basic_memory_tst extends IoEngine_fil_basic_base {
list.DelAt(0); // remove drive
IoEngine_xrg_recycleFil recycleXrg = bin.Send_xrg(fil)
.RootDirNames_(list)
- .AppName_("gplx.test").Time_(DateAdp_.parse_gplx("20100102_115559123")).Uuid_(UuidAdp_.parse_("467ffb41-cdfe-402f-b22b-be855425784b"));
+ .AppName_("gplx.test").Time_(DateAdp_.parse_gplx("20100102_115559123")).Uuid_(Guid_adp_.parse_("467ffb41-cdfe-402f-b22b-be855425784b"));
recycleXrg.Exec();
fx.tst_ExistsPaths(false, fil);
fx.tst_ExistsPaths(true, recycleXrg.RecycleUrl());
diff --git a/100_core/tst/gplx/ios/IoEngine_fil_basic_system_tst.java b/100_core/tst/gplx/ios/IoEngine_fil_basic_system_tst.java
index 26ef9ba0c..d2a287cdf 100644
--- a/100_core/tst/gplx/ios/IoEngine_fil_basic_system_tst.java
+++ b/100_core/tst/gplx/ios/IoEngine_fil_basic_system_tst.java
@@ -37,7 +37,7 @@ public class IoEngine_fil_basic_system_tst extends IoEngine_fil_basic_base {
ListAdp list = root.XtoNames(); list.DelAt(0); // remove drive
IoEngine_xrg_recycleFil recycleXrg = bin.Send_xrg(fil)
.RootDirNames_(list)
- .AppName_("gplx.test").Time_(DateAdp_.parse_gplx("20100102_115559123")).Uuid_(UuidAdp_.parse_("467ffb41-cdfe-402f-b22b-be855425784b"));
+ .AppName_("gplx.test").Time_(DateAdp_.parse_gplx("20100102_115559123")).Uuid_(Guid_adp_.parse_("467ffb41-cdfe-402f-b22b-be855425784b"));
recycleXrg.Exec();
fx.tst_ExistsPaths(false, fil);
fx.tst_ExistsPaths(true, recycleXrg.RecycleUrl());
diff --git a/100_core/tst/gplx/ios/IoEngine_xrg_recycleFil_tst.java b/100_core/tst/gplx/ios/IoEngine_xrg_recycleFil_tst.java
index 5525f7efa..36e6493d1 100644
--- a/100_core/tst/gplx/ios/IoEngine_xrg_recycleFil_tst.java
+++ b/100_core/tst/gplx/ios/IoEngine_xrg_recycleFil_tst.java
@@ -25,7 +25,7 @@ public class IoEngine_xrg_recycleFil_tst {
tst_GenRecycleUrl(recycle_(), Io_url_.mem_fil_("mem/z_trash/20100102/gplx.images;115559123;;fil.txt"));
tst_GenRecycleUrl(recycle_().Uuid_include_(), Io_url_.mem_fil_("mem/z_trash/20100102/gplx.images;115559123;467ffb41-cdfe-402f-b22b-be855425784b;fil.txt"));
}
- IoEngine_xrg_recycleFil recycle_() {return IoEngine_xrg_recycleFil.gplx_(Io_url_.mem_fil_("mem/dir/fil.txt")).AppName_("gplx.images").Uuid_(UuidAdp_.parse_("467ffb41-cdfe-402f-b22b-be855425784b")).Time_(DateAdp_.parse_gplx("20100102_115559123"));}
+ IoEngine_xrg_recycleFil recycle_() {return IoEngine_xrg_recycleFil.gplx_(Io_url_.mem_fil_("mem/dir/fil.txt")).AppName_("gplx.images").Uuid_(Guid_adp_.parse_("467ffb41-cdfe-402f-b22b-be855425784b")).Time_(DateAdp_.parse_gplx("20100102_115559123"));}
void tst_GenRecycleUrl(IoEngine_xrg_recycleFil xrg, Io_url expd) {
Tfds.Eq(expd, xrg.RecycleUrl());
}
diff --git a/110_gfml/src_500_build/gplx/gfml/GfmlStringHighlighter.java b/110_gfml/src_500_build/gplx/gfml/GfmlStringHighlighter.java
index 2dc31ddc8..02f29da61 100644
--- a/110_gfml/src_500_build/gplx/gfml/GfmlStringHighlighter.java
+++ b/110_gfml/src_500_build/gplx/gfml/GfmlStringHighlighter.java
@@ -67,12 +67,12 @@ class GfmlStringHighlighter {
int gap = nxtMarkBgn - endPos;
if (gap > 0) {
int gapDigits = Int_.DigitCount(gap);
- posBfr.Add_fmt("[{0}]", Int_.Xto_str_pad_bgn(gap, gapDigits));
+ posBfr.Add_fmt("[{0}]", Int_.Xto_str_pad_bgn_zero(gap, gapDigits));
rawBfr.Add_fmt("[{0}]", String_.Repeat(".", gapDigits));
symBfr.Add_fmt(" {0} ", String_.Repeat(" ", gapDigits));
}
if (curMark.Sym() != ' ')
- symList.Add(String_.Format("[{0}] {1} {2}", Int_.Xto_str_pad_bgn(curMark.Pos(), rawLenDigits), curMark.Sym(), curMark.Msg()));
+ symList.Add(String_.Format("[{0}] {1} {2}", Int_.Xto_str_pad_bgn_zero(curMark.Pos(), rawLenDigits), curMark.Sym(), curMark.Msg()));
}
if (rawBfrBgn == 0) {
posBfr.Add_at(0, "<");
diff --git a/140_dbs/.classpath b/140_dbs/.classpath
index 50c3a49f4..88a4ccc1d 100644
--- a/140_dbs/.classpath
+++ b/140_dbs/.classpath
@@ -8,7 +8,7 @@
-
+
diff --git a/140_dbs/src/gplx/dbs/Db_batch_wkr__attach.java b/140_dbs/src/gplx/dbs/Db_batch_wkr__attach.java
deleted file mode 100644
index 56b7f2a1e..000000000
--- a/140_dbs/src/gplx/dbs/Db_batch_wkr__attach.java
+++ /dev/null
@@ -1,43 +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 .
-*/
-package gplx.dbs; import gplx.*;
-public class Db_batch_wkr__attach implements Db_batch_wkr {
- private final Db_conn conn;
- private final ListAdp list = ListAdp_.new_();
- public Db_batch_wkr__attach Add(String alias, Io_url url) {list.Add(new Db_batch_wkr__attach_itm(alias, url)); return this;}
- public Db_batch_wkr__attach(Db_conn conn) {this.conn = conn;}
- public void Batch_bgn() {
- int len = list.Count();
- for (int i = 0; i < len; ++i) {
- Db_batch_wkr__attach_itm itm = (Db_batch_wkr__attach_itm)list.FetchAt(i);
- conn.Exec_env_db_attach(itm.Alias(), itm.Url());
- }
- }
- public void Batch_end() {
- int len = list.Count();
- for (int i = 0; i < len; ++i) {
- Db_batch_wkr__attach_itm itm = (Db_batch_wkr__attach_itm)list.FetchAt(i);
- conn.Exec_env_db_detach(itm.Alias());
- }
- }
-}
-class Db_batch_wkr__attach_itm {
- public Db_batch_wkr__attach_itm(String alias, Io_url url) {this.alias = alias; this.url = url;}
- public String Alias() {return alias;} private final String alias;
- public Io_url Url() {return url;} private final Io_url url;
-}
diff --git a/140_dbs/src/gplx/dbs/Db_batch_wkr__msg.java b/140_dbs/src/gplx/dbs/Db_batch_wkr__msg.java
deleted file mode 100644
index 471df45cb..000000000
--- a/140_dbs/src/gplx/dbs/Db_batch_wkr__msg.java
+++ /dev/null
@@ -1,26 +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 .
-*/
-package gplx.dbs; import gplx.*;
-public class Db_batch_wkr__msg implements Db_batch_wkr {
- private final Gfo_usr_dlg usr_dlg; private final String msg_pre;
- public Db_batch_wkr__msg(Gfo_usr_dlg usr_dlg, String msg_pre) {this.usr_dlg = usr_dlg; this.msg_pre = msg_pre;}
- public Gfo_usr_dlg Usr_dlg() {return usr_dlg;}
- public String Msg() {return msg;} public Db_batch_wkr__msg Msg_(String v) {msg = v; return this;} private String msg;
- public void Batch_bgn() {usr_dlg.Plog_many("", "", "bgn:" + msg_pre + "." + msg);}
- public void Batch_end() {usr_dlg.Plog_many("", "", "end:" + msg_pre + "." + msg);}
-}
diff --git a/140_dbs/src/gplx/dbs/Db_conn.java b/140_dbs/src/gplx/dbs/Db_conn.java
index ee2d4bb7d..db17d9000 100644
--- a/140_dbs/src/gplx/dbs/Db_conn.java
+++ b/140_dbs/src/gplx/dbs/Db_conn.java
@@ -18,18 +18,15 @@ along with this program. If not, see .
package gplx.dbs; import gplx.*;
import gplx.dbs.engines.*; import gplx.dbs.qrys.*;
public class Db_conn {
- private final Db_engine engine;
- private final ListAdp rls_list = ListAdp_.new_();
- public Db_conn(Db_engine engine) {
- this.engine = engine;
- this.txn_mgr = new Db_txn_mgr(engine);
- }
- public Db_url Url() {return engine.Url();}
- public Db_txn_mgr Txn_mgr() {return txn_mgr;} private final Db_txn_mgr txn_mgr;
- public void Txn_bgn() {txn_mgr.Txn_bgn();}
- public void Txn_commit() {txn_mgr.Txn_end(); txn_mgr.Txn_bgn();}
- public void Txn_end() {txn_mgr.Txn_end();}
- public Db_stmt Stmt_insert(String tbl, Db_meta_fld_list flds) {return engine.New_stmt_prep(Db_qry_insert.new_(tbl, flds.To_str_ary()));}
+ private final ListAdp rls_list = ListAdp_.new_(); private final Db_engine engine;
+ public Db_conn(Db_engine engine) {this.engine = engine;}
+ public Db_conn_info Conn_info() {return engine.Conn_info();}
+ public void Txn_bgn() {engine.Txn_bgn("");}
+ public void Txn_bgn(String name) {engine.Txn_bgn(name);}
+ public void Txn_end() {engine.Txn_end();}
+ public void Txn_cxl() {engine.Txn_cxl();}
+ public void Txn_sav() {engine.Txn_sav();}
+ public Db_stmt Stmt_insert(String tbl, Db_meta_fld_list flds) {return engine.New_stmt_prep(Db_qry_insert.new_(tbl, flds.To_str_ary_wo_autonum()));}
public Db_stmt Stmt_insert(String tbl, String... cols) {return engine.New_stmt_prep(Db_qry_insert.new_(tbl, cols));}
public Db_stmt Stmt_update(String tbl, String[] where, String... cols) {return engine.New_stmt_prep(Db_qry_update.new_(tbl, where, cols));}
public Db_stmt Stmt_update_exclude(String tbl, Db_meta_fld_list flds, String... where) {return engine.New_stmt_prep(Db_qry_update.new_(tbl, where, flds.To_str_ary_exclude(where)));}
@@ -37,46 +34,40 @@ 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, null));}
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(), null));}
public Db_stmt Stmt_select_order(String tbl, Db_meta_fld_list flds, String[] where, String... orderbys) {return engine.New_stmt_prep(Db_qry__select_in_tbl.new_(tbl, where, flds.To_str_ary(), orderbys));}
- public void Exec_create_tbl_and_idx(Db_meta_tbl meta) {
- 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_ddl_create_idx(usr_dlg, idxs);}
- public void Exec_env_db_attach(String alias, Io_url db_url) {engine.Exec_env_db_attach(alias, db_url);}
- public void Exec_env_db_detach(String alias) {engine.Exec_env_db_detach(alias);}
- 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() {
+ public Db_stmt Stmt_select_order(String tbl, String[] flds, String[] where, String... orderbys) {return engine.New_stmt_prep(Db_qry__select_in_tbl.new_(tbl, where, flds, orderbys));}
+ public Db_stmt Stmt_new(Db_qry qry) {return engine.New_stmt_prep(qry);}
+ public void Env_db_attach(String alias, Io_url db_url) {engine.Env_db_attach(alias, db_url);}
+ public void Env_db_detach(String alias) {engine.Env_db_detach(alias);}
+ public void Env_vacuum() {Exec_sql_plog_ntx("vacuuming: url=" + this.Conn_info().Xto_api(), "VACUUM;");}
+ public void Ddl_create_tbl(Db_meta_tbl meta) {engine.Ddl_create_tbl(meta); engine.Ddl_create_idx(Gfo_usr_dlg_.Null, meta.Idxs());}
+ public void Ddl_create_idx(Db_meta_idx... idxs) {engine.Ddl_create_idx(Gfo_usr_dlg_.I, idxs);}
+ public void Ddl_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... idxs) {engine.Ddl_create_idx(usr_dlg, idxs);}
+ public void Ddl_append_fld(String tbl, Db_meta_fld fld) {engine.Ddl_append_fld(tbl, fld);}
+ public void Ddl_delete_tbl(String tbl) {engine.Ddl_delete_tbl(tbl);}
+ public void Rls_reg(RlsAble rls) {rls_list.Add(rls);}
+ public void Rls_conn() {
int len = rls_list.Count();
for (int i = 0; i < len; ++i) {
RlsAble itm = (RlsAble)rls_list.FetchAt(i);
itm.Rls();
}
engine.Conn_term();
-// Db_conn_pool.I.Del(this.Url()); // remove from pool, else rls'd instance will be cached and fail upon next use
+ Db_conn_pool.I.Del(engine.Conn_info());
}
- public Db_stmt Stmt_new(Db_qry qry) {return engine.New_stmt_prep(qry);}
- public int Exec_qry(Db_qry qry) {txn_mgr.Txn_count_(txn_mgr.Txn_count() + 1); return Int_.cast_(engine.Exec_as_obj(qry));}
+ public int Exec_sql(String sql) {return this.Exec_qry(Db_qry_sql.dml_(sql));}
+ public Db_rdr Exec_sql_as_rdr2(String sql) {return this.Stmt_new(Db_qry_sql.dml_(sql)).Exec_select__rls_auto();}
+ public int Exec_sql_plog_ntx(String msg, String sql) {return Exec_sql_plog(Bool_.N, msg, sql);}
+ public int Exec_sql_plog_txn(String msg, String sql) {return Exec_sql_plog(Bool_.Y, msg, sql);}
+ public int Exec_sql_plog(boolean txn, String msg, String sql) {
+ Gfo_usr_dlg_.I.Plog_many("", "", "bgn: " + msg);
+ if (txn) this.Txn_bgn();
+ int rv = Exec_sql(sql);
+ if (txn) this.Txn_end();
+ Gfo_usr_dlg_.I.Plog_many("", "", "end: " + msg);
+ return rv;
+ }
+ public int Exec_qry(Db_qry qry) {return Int_.cast_(engine.Exec_as_obj(qry));}
public DataRdr Exec_qry_as_rdr(Db_qry qry) {return DataRdr_.cast_(engine.Exec_as_obj(qry));}
- public int Exec_sql(String sql) {return this.Exec_qry(Db_qry_sql.dml_(sql));}
- public DataRdr Exec_sql_as_rdr(String sql) {return this.Exec_qry_as_rdr(Db_qry_sql.rdr_(sql));}
- public void Exec_sql_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... idxs) {engine.Exec_ddl_create_idx(usr_dlg, idxs);}
- public void Exec_sql(Db_batch_wkr... wkrs) {
- int len = wkrs.length;
- for (int i = 0; i < len; ++i) {
- Db_batch_wkr wkr = wkrs[i];
- wkr.Batch_bgn();
- wkr.Batch_end();
- }
- }
- public void Exec_sql__vacuum(Db_batch_wkr__msg msg) {
- msg.Msg_("vaccuum");
- Exec_sql(msg, Batch_sql("VACCUUM;"));
- }
- public void Exec_sql__idx(Db_batch_wkr__msg msg, Db_meta_idx... idxs) {
- engine.Exec_ddl_create_idx(msg.Usr_dlg(), idxs);
- }
- public Db_batch_wkr__msg Batch_msg(Gfo_usr_dlg usr_dlg, String msg_pre) {return new Db_batch_wkr__msg(usr_dlg, msg_pre);}
- public Db_batch_wkr__attach Batch_attach(String alias, Io_url url) {return new Db_batch_wkr__attach(this).Add(alias, url);}
- public Db_batch_wkr__sql Batch_sql(String... lines) {return new Db_batch_wkr__sql(this, lines);}
+ public int Exec_sql_args(String sql, Object... args) {return this.Exec_qry(Db_qry_sql.dml_(String_.Format(sql, args)));}
+ public DataRdr Exec_sql_as_rdr(String sql) {return this.Exec_qry_as_rdr(Db_qry_sql.rdr_(sql));}
}
diff --git a/140_dbs/src/gplx/dbs/Db_conn_.java b/140_dbs/src/gplx/dbs/Db_conn_.java
index 18cdf86b1..958beebb8 100644
--- a/140_dbs/src/gplx/dbs/Db_conn_.java
+++ b/140_dbs/src/gplx/dbs/Db_conn_.java
@@ -18,7 +18,7 @@ along with this program. If not, see .
package gplx.dbs; import gplx.*;
import gplx.dbs.qrys.*;
public class Db_conn_ {
- public static final Db_conn Null = Db_conn_pool.I.Get_or_new(Db_url_.Null);
+ public static final Db_conn Empty = Db_conn_pool.I.Get_or_new(Db_conn_info_.Null);
public static int Select_fld0_as_int_or(Db_conn p, String sql, int or) {
DataRdr rdr = DataRdr_.Null;
try {
diff --git a/140_dbs/src/gplx/dbs/Db_conn_bldr.java b/140_dbs/src/gplx/dbs/Db_conn_bldr.java
index 56c888d49..00b838685 100644
--- a/140_dbs/src/gplx/dbs/Db_conn_bldr.java
+++ b/140_dbs/src/gplx/dbs/Db_conn_bldr.java
@@ -20,11 +20,12 @@ public class Db_conn_bldr {
private Db_conn_bldr_wkr wkr;
public void Reg_default_sqlite() {wkr = Db_conn_bldr_wkr__sqlite.I; wkr.Clear_for_tests();}
public void Reg_default_mem() {wkr = Db_conn_bldr_wkr__mem.I; wkr.Clear_for_tests();}
- public Db_conn Get(String type, Object url_obj) {return wkr.Get(type, url_obj);}
- public Db_conn New(String type, Object url_obj) {return wkr.New(type, url_obj);}
- public Db_conn_bldr_data Get_or_new(String type, Object url_obj) {
- boolean exists = wkr.Exists(type, url_obj);
- Db_conn conn = exists ? Get(type, url_obj) : New(type, url_obj);
+ public boolean Exists(Io_url url) {return wkr.Exists(url);}
+ public Db_conn Get(Io_url url) {return wkr.Get(url);}
+ public Db_conn New(Io_url url) {return wkr.New(url);}
+ public Db_conn_bldr_data Get_or_new(Io_url url) {
+ boolean exists = wkr.Exists(url);
+ Db_conn conn = exists ? Get(url) : New(url);
return new Db_conn_bldr_data(conn, exists);
}
public static final Db_conn_bldr I = new Db_conn_bldr(); Db_conn_bldr() {}
diff --git a/140_dbs/src/gplx/dbs/Db_conn_bldr_wkr.java b/140_dbs/src/gplx/dbs/Db_conn_bldr_wkr.java
index 2d150c393..29714f968 100644
--- a/140_dbs/src/gplx/dbs/Db_conn_bldr_wkr.java
+++ b/140_dbs/src/gplx/dbs/Db_conn_bldr_wkr.java
@@ -19,24 +19,21 @@ package gplx.dbs; import gplx.*;
import gplx.dbs.engines.sqlite.*;
public interface Db_conn_bldr_wkr {
void Clear_for_tests();
- boolean Exists(String type, Object url_obj);
- Db_conn Get(String type, Object url_obj);
- Db_conn New(String type, Object url_obj);
+ boolean Exists(Io_url url);
+ Db_conn Get(Io_url url);
+ Db_conn New(Io_url url);
}
class Db_conn_bldr_wkr__sqlite implements Db_conn_bldr_wkr {
public void Clear_for_tests() {}
- public boolean Exists(String type, Object url_obj) {
- Io_url io_url = (Io_url)url_obj; return Io_mgr._.ExistsFil(io_url);
- }
- public Db_conn Get(String type, Object url_obj) {
- Io_url io_url = (Io_url)url_obj; if (!Io_mgr._.ExistsFil(io_url)) return null;
- Db_url db_url = Db_url_.sqlite_(io_url);
+ public boolean Exists(Io_url url) {return Io_mgr._.ExistsFil(url);}
+ public Db_conn Get(Io_url url) {
+ if (!Io_mgr._.ExistsFil(url)) return null;
+ Db_conn_info db_url = Db_conn_info_.sqlite_(url);
return Db_conn_pool.I.Get_or_new(db_url);
}
- public Db_conn New(String type, Object url_obj) {
- Io_url io_url = (Io_url)url_obj;
- Io_mgr._.CreateDirIfAbsent(io_url.OwnerDir()); // must assert that dir exists
- Db_url db_url = Sqlite_url.make_(io_url);
+ public Db_conn New(Io_url url) {
+ Io_mgr._.CreateDirIfAbsent(url.OwnerDir()); // must assert that dir exists
+ Db_conn_info db_url = Sqlite_conn_info.make_(url);
Db_conn conn = Db_conn_pool.I.Get_or_new(db_url);
Sqlite_engine_.Pragma_page_size(conn, 4096);
// conn.Conn_term(); // close conn after PRAGMA adjusted
@@ -47,22 +44,19 @@ class Db_conn_bldr_wkr__sqlite implements Db_conn_bldr_wkr {
class Db_conn_bldr_wkr__mem implements Db_conn_bldr_wkr {
private final HashAdp hash = HashAdp_.new_();
public void Clear_for_tests() {hash.Clear(); Db_conn_pool.I.Clear();}
- public boolean Exists(String type, Object url_obj) {
- Io_url io_url = (Io_url)url_obj;
- String io_url_str = io_url.Xto_api();
+ public boolean Exists(Io_url url) {
+ String io_url_str = url.Xto_api();
return hash.Has(io_url_str);
}
- public Db_conn Get(String type, Object url_obj) {
- Io_url io_url = (Io_url)url_obj;
- String io_url_str = io_url.Xto_api();
+ public Db_conn Get(Io_url url) {
+ String io_url_str = url.Xto_api();
if (!hash.Has(io_url_str)) return null;
- return Db_conn_pool.I.Get_or_new__mem(io_url.Xto_api());
+ return Db_conn_pool.I.Get_or_new__mem(url.Xto_api());
}
- public Db_conn New(String type, Object url_obj) {
- Io_url io_url = (Io_url)url_obj;
- String io_url_str = io_url.Xto_api();
+ public Db_conn New(Io_url url) {
+ String io_url_str = url.Xto_api();
hash.Add(io_url_str, io_url_str);
- return Db_conn_pool.I.Get_or_new__mem(io_url.Xto_api());
+ return Db_conn_pool.I.Get_or_new__mem(url.Xto_api());
}
public static final Db_conn_bldr_wkr__mem I = new Db_conn_bldr_wkr__mem(); Db_conn_bldr_wkr__mem() {}
}
diff --git a/140_dbs/src/gplx/dbs/Db_url.java b/140_dbs/src/gplx/dbs/Db_conn_info.java
similarity index 90%
rename from 140_dbs/src/gplx/dbs/Db_url.java
rename to 140_dbs/src/gplx/dbs/Db_conn_info.java
index 133ec5309..760975fdd 100644
--- a/140_dbs/src/gplx/dbs/Db_url.java
+++ b/140_dbs/src/gplx/dbs/Db_conn_info.java
@@ -16,10 +16,10 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.dbs; import gplx.*;
-public interface Db_url {
+public interface Db_conn_info {
String Tid();
String Database();
String Xto_raw();
String Xto_api();
- Db_url New_self(String raw, GfoMsg m);
+ Db_conn_info New_self(String raw, GfoMsg m);
}
diff --git a/140_dbs/src/gplx/dbs/Db_url_.java b/140_dbs/src/gplx/dbs/Db_conn_info_.java
similarity index 53%
rename from 140_dbs/src/gplx/dbs/Db_url_.java
rename to 140_dbs/src/gplx/dbs/Db_conn_info_.java
index a835d7e6b..3ca02d9c1 100644
--- a/140_dbs/src/gplx/dbs/Db_url_.java
+++ b/140_dbs/src/gplx/dbs/Db_conn_info_.java
@@ -18,23 +18,23 @@ along with this program. If not, see .
package gplx.dbs; import gplx.*;
import gplx.dbs.engines.nulls.*; import gplx.dbs.engines.mems.*; import gplx.dbs.engines.sqlite.*; import gplx.dbs.engines.tdbs.*;
import gplx.dbs.engines.mysql.*; import gplx.dbs.engines.postgres.*;
-public class Db_url_ {
- public static final Db_url Null = Null_url._;
- public static final Db_url Test = Mysql_url.new_("127.0.0.1", "unit_tests", "root", "mysql7760");
- public static Db_url parse_(String raw) {return Db_url_pool._.Parse(raw);}
- public static Db_url sqlite_(Io_url url) {return Sqlite_url.load_(url);}
- public static Db_url tdb_(Io_url url) {return Tdb_url.new_(url);}
- public static Db_url mem_(String db) {return Db_url__mem.new_(db);}
- public static final String Key_tdb = Tdb_url.Tid_const;
+public class Db_conn_info_ {
+ public static final Db_conn_info Null = Null_conn_info._;
+ public static final Db_conn_info Test = Mysql_conn_info.new_("127.0.0.1", "unit_tests", "root", "mysql7760");
+ public static Db_conn_info parse_(String raw) {return Db_conn_info_pool._.Parse(raw);}
+ public static Db_conn_info sqlite_(Io_url url) {return Sqlite_conn_info.load_(url);}
+ public static Db_conn_info tdb_(Io_url url) {return Tdb_conn_info.new_(url);}
+ public static Db_conn_info mem_(String db) {return Db_conn_info__mem.new_(db);}
+ public static final String Key_tdb = Tdb_conn_info.Tid_const;
}
-class Db_url_pool {
+class Db_conn_info_pool {
private OrderedHash regy = OrderedHash_.new_();
- public Db_url_pool() {
- this.Add(Null_url._).Add(Tdb_url._).Add(Mysql_url._).Add(Postgres_url._).Add(Sqlite_url._);
- this.Add(Db_url__mem.I);
+ public Db_conn_info_pool() {
+ this.Add(Null_conn_info._).Add(Tdb_conn_info._).Add(Mysql_conn_info._).Add(Postgres_conn_info._).Add(Sqlite_conn_info._);
+ this.Add(Db_conn_info__mem.I);
}
- public Db_url_pool Add(Db_url itm) {regy.AddReplace(itm.Tid(), itm); return this;}
- public Db_url Parse(String raw) {// assume each pair has format of: name=val;
+ public Db_conn_info_pool Add(Db_conn_info itm) {regy.AddReplace(itm.Tid(), itm); return this;}
+ public Db_conn_info Parse(String raw) {// assume each pair has format of: name=val;
try {
GfoMsg m = GfoMsg_.new_parse_("db_url");
String[] terms = String_.Split(raw, ";");
@@ -47,10 +47,10 @@ class Db_url_pool {
else
m.Add(kv[0], kv[1]);
}
- Db_url prototype = (Db_url)regy.Fetch(url_tid);
+ Db_conn_info prototype = (Db_conn_info)regy.Fetch(url_tid);
return prototype.New_self(raw, m);
}
- catch(Exception exc) {throw Err_.parse_type_exc_(exc, Db_url.class, raw);}
+ catch(Exception exc) {throw Err_.parse_type_exc_(exc, Db_conn_info.class, raw);}
}
- public static final Db_url_pool _ = new Db_url_pool();
+ public static final Db_conn_info_pool _ = new Db_conn_info_pool();
}
diff --git a/140_dbs/src/gplx/dbs/Db_url__base.java b/140_dbs/src/gplx/dbs/Db_conn_info__base.java
similarity index 92%
rename from 140_dbs/src/gplx/dbs/Db_url__base.java
rename to 140_dbs/src/gplx/dbs/Db_conn_info__base.java
index b4a5b7770..f5a48c4a5 100644
--- a/140_dbs/src/gplx/dbs/Db_url__base.java
+++ b/140_dbs/src/gplx/dbs/Db_conn_info__base.java
@@ -17,13 +17,13 @@ along with this program. If not, see .
*/
package gplx.dbs; import gplx.*;
import gplx.core.strings.*;
-public abstract class Db_url__base implements Db_url {
+public abstract class Db_conn_info__base implements Db_conn_info {
public abstract String Tid();
public String Xto_raw() {return raw;} private String raw = "";
public String Xto_api() {return api;} private String api = "";
public String Database() {return database;} protected String database = "";
public String Server() {return server;} private String server = "";
- public abstract Db_url New_self(String raw, GfoMsg m);
+ public abstract Db_conn_info New_self(String raw, GfoMsg m);
protected void Ctor(String server, String database, String raw, String api) {this.server = server; this.database = database; this.raw = raw; this.api = api;}
protected static String BldApi(GfoMsg m, KeyVal... xtnAry) {
String_bldr sb = String_bldr_.new_();
diff --git a/140_dbs/src/gplx/dbs/Db_url_tst.java b/140_dbs/src/gplx/dbs/Db_conn_info_tst.java
similarity index 76%
rename from 140_dbs/src/gplx/dbs/Db_url_tst.java
rename to 140_dbs/src/gplx/dbs/Db_conn_info_tst.java
index a40046a72..5aa8d41d5 100644
--- a/140_dbs/src/gplx/dbs/Db_url_tst.java
+++ b/140_dbs/src/gplx/dbs/Db_conn_info_tst.java
@@ -17,10 +17,10 @@ along with this program. If not, see .
*/
package gplx.dbs; import gplx.*;
import org.junit.*;
-public class Db_url_tst {
+public class Db_conn_info_tst {
@Before public void setup() {
- regy.Add(Db_url_mock._);
- } private final Db_url_pool regy = new Db_url_pool();
+ regy.Add(Db_conn_info_mock._);
+ } private final Db_conn_info_pool regy = new Db_conn_info_pool();
@Test public void Parse() {
tst_Parse("gplx_key=mock;id=1;", kv_("id", "1")); // one; gplx_key removed
tst_Parse("gplx_key=mock;id=1;name=me;", kv_("id", "1"), kv_("name", "me")); // many
@@ -28,19 +28,19 @@ public class Db_url_tst {
}
private KeyVal kv_(String key, Object val) {return KeyVal_.new_(key, val);}
private void tst_Parse(String raw, KeyVal... expd) {
- Db_url_mock mock = (Db_url_mock)regy.Parse(raw);
+ Db_conn_info_mock mock = (Db_conn_info_mock)regy.Parse(raw);
Tfds.Eq_ary_str(expd, mock.Kvs());
}
}
-class Db_url_mock extends Db_url__base {
+class Db_conn_info_mock extends Db_conn_info__base {
public KeyVal[] Kvs() {return kvs;} KeyVal[] kvs;
@Override public String Tid() {return Tid_const;} public static final String Tid_const = "mock";
- @Override public Db_url New_self(String raw, GfoMsg m) {
- Db_url_mock rv = new Db_url_mock();
+ @Override public Db_conn_info New_self(String raw, GfoMsg m) {
+ Db_conn_info_mock rv = new Db_conn_info_mock();
rv.kvs = new KeyVal[m.Args_count()];
for (int i = 0; i < m.Args_count(); i++)
rv.kvs[i] = m.Args_getAt(i);
return rv;
}
- public static final Db_url_mock _ = new Db_url_mock(); Db_url_mock() {}
+ public static final Db_conn_info_mock _ = new Db_conn_info_mock(); Db_conn_info_mock() {}
}
diff --git a/140_dbs/src/gplx/dbs/Db_conn_pool.java b/140_dbs/src/gplx/dbs/Db_conn_pool.java
index 0be514532..1a949947b 100644
--- a/140_dbs/src/gplx/dbs/Db_conn_pool.java
+++ b/140_dbs/src/gplx/dbs/Db_conn_pool.java
@@ -21,11 +21,11 @@ import gplx.dbs.engines.sqlite.*; import gplx.dbs.engines.mysql.*; import gplx.d
public class Db_conn_pool {
private final HashAdp conn_hash = HashAdp_.new_(); private final HashAdp engine_hash = HashAdp_.new_();
public void Clear() {conn_hash.Clear();}
- public void Del(Db_url url) {conn_hash.Del(url.Xto_api());}
- public Db_conn Get_or_new__mem(String db) {return Get_or_new(Db_url__mem.new_(db));}
- public Db_conn Get_or_new__sqlite(Io_url url) {return Get_or_new(Db_url_.sqlite_(url));}
- public Db_conn Get_or_new(String s) {return Get_or_new(Db_url_.parse_(s));}
- public Db_conn Get_or_new(Db_url url) {
+ public void Del(Db_conn_info url) {conn_hash.Del(url.Xto_api());}
+ public Db_conn Get_or_new__mem(String db) {return Get_or_new(Db_conn_info__mem.new_(db));}
+ public Db_conn Get_or_new__sqlite(Io_url url) {return Get_or_new(Db_conn_info_.sqlite_(url));}
+ public Db_conn Get_or_new(String s) {return Get_or_new(Db_conn_info_.parse_(s));}
+ public Db_conn Get_or_new(Db_conn_info url) {
Db_conn rv = (Db_conn)conn_hash.Fetch(url.Xto_api());
if (rv == null) {
Db_engine prime = (Db_engine)engine_hash.Fetch(url.Tid()); if (prime == null) throw Err_.new_("db engine prototype not found; tid={0}", url.Tid());
diff --git a/140_dbs/src/gplx/dbs/Db_meta_fld.java b/140_dbs/src/gplx/dbs/Db_meta_fld.java
index 5c385af96..f062f512f 100644
--- a/140_dbs/src/gplx/dbs/Db_meta_fld.java
+++ b/140_dbs/src/gplx/dbs/Db_meta_fld.java
@@ -17,16 +17,16 @@ along with this program. If not, see .
*/
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, Object default_value) {
+ public Db_meta_fld(String name, int tid, int len, boolean nullable, boolean primary, boolean autonum, Object default_value) {
this.name = name; this.tid = tid; this.len = len;
- this.nullable = nullable; this.primary = primary; this.autoincrement = autoincrement; this.default_value = default_value;
+ this.nullable = nullable; this.primary = primary; this.autonum = autonum; this.default_value = default_value;
}
public int Tid() {return tid;} private final int tid;
public String Name() {return name;} private final String name;
public int Len() {return len;} private final int len;
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 boolean Autonum() {return autonum;} private final boolean autonum;
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 Key_null = null;
diff --git a/140_dbs/src/gplx/dbs/Db_meta_fld_list.java b/140_dbs/src/gplx/dbs/Db_meta_fld_list.java
index a1fbf6a08..315fbf6bb 100644
--- a/140_dbs/src/gplx/dbs/Db_meta_fld_list.java
+++ b/140_dbs/src/gplx/dbs/Db_meta_fld_list.java
@@ -23,6 +23,16 @@ public class Db_meta_fld_list {
public Db_meta_fld Get_by(String name) {return (Db_meta_fld)flds.Fetch(name);}
public String[] To_str_ary() {if (str_ary == null) str_ary = (String[])keys.Xto_ary(String.class); return str_ary;} private String[] str_ary;
public Db_meta_fld[] To_fld_ary() {if (fld_ary == null) fld_ary = (Db_meta_fld[])flds.Xto_ary(Db_meta_fld.class); return fld_ary;} private Db_meta_fld[] fld_ary;
+ public String[] To_str_ary_wo_autonum() {
+ int len = flds.Count();
+ ListAdp rv = ListAdp_.new_();
+ for (int i = 0; i < len; ++i) {
+ Db_meta_fld fld = (Db_meta_fld)flds.FetchAt(i);
+ if (fld.Autonum()) continue;
+ rv.Add(fld.Name());
+ }
+ return (String[])rv.Xto_ary(String.class);
+ }
public String[] To_str_ary_exclude(String[] ary) {
HashAdp ary_hash = HashAdp_.new_();
ListAdp rv = ListAdp_.new_();
@@ -46,11 +56,14 @@ public class Db_meta_fld_list {
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_autonum(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_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_pkey(String name, int len) {return Add(name, Db_meta_fld.Tid_str, len, Bool_.N, Bool_.Y, Bool_.N, Db_meta_fld.Default_value_null);}
+ public String Add_str_null(String name, int len) {return Add(name, Db_meta_fld.Tid_str, len, Bool_.Y, 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);}
diff --git a/140_dbs/src/gplx/dbs/Db_meta_idx.java b/140_dbs/src/gplx/dbs/Db_meta_idx.java
index 6e81ef1ea..a49bfdb4d 100644
--- a/140_dbs/src/gplx/dbs/Db_meta_idx.java
+++ b/140_dbs/src/gplx/dbs/Db_meta_idx.java
@@ -31,4 +31,5 @@ public class Db_meta_idx {
public static Db_meta_idx new_unique_by_tbl_wo_null(String tbl, String name, String... flds) {return new Db_meta_idx(tbl, Bld_idx_name(tbl, name), Bool_.Y, String_.Ary_wo_null(flds));}
public static Db_meta_idx new_normal_by_tbl_wo_null(String tbl, String name, String... flds) {return new Db_meta_idx(tbl, Bld_idx_name(tbl, name), Bool_.N, String_.Ary_wo_null(flds));}
public static String Bld_idx_name(String tbl, String suffix) {return String_.Concat(tbl, "__", suffix);}
+ public static final Db_meta_idx[] Ary_empty = new Db_meta_idx[0];
}
diff --git a/140_dbs/src/gplx/dbs/Db_meta_tbl.java b/140_dbs/src/gplx/dbs/Db_meta_tbl.java
index 7ae542650..9ca1f2506 100644
--- a/140_dbs/src/gplx/dbs/Db_meta_tbl.java
+++ b/140_dbs/src/gplx/dbs/Db_meta_tbl.java
@@ -19,6 +19,7 @@ package gplx.dbs; import gplx.*;
import gplx.dbs.sqls.*;
public class Db_meta_tbl {
public Db_meta_tbl(String name, Db_meta_fld[] flds, Db_meta_idx[] idxs) {
+ if (idxs == null) idxs = Db_meta_idx.Ary_empty; // empty params will pass idxs of null; set to idxs[0] else null ref when calling create_table
this.name = name; this.flds = flds; this.idxs = idxs;
}
public String Name() {return name;} private final String name;
diff --git a/140_dbs/src/gplx/dbs/Db_rdr_.java b/140_dbs/src/gplx/dbs/Db_rdr_.java
index 074aeefe8..cdf1508ea 100644
--- a/140_dbs/src/gplx/dbs/Db_rdr_.java
+++ b/140_dbs/src/gplx/dbs/Db_rdr_.java
@@ -17,9 +17,9 @@ along with this program. If not, see .
*/
package gplx.dbs; import gplx.*;
public class Db_rdr_ {
- public static final Db_rdr Null = new Db_rdr__null();
+ public static final Db_rdr Empty = new Db_rdr__empty();
}
-class Db_rdr__null implements Db_rdr {
+class Db_rdr__empty implements Db_rdr {
public boolean Move_next() {return false;}
public byte[] Read_bry(int i) {return Bry_.Empty;}
public byte[] Read_bry(String k) {return Bry_.Empty;}
diff --git a/140_dbs/src/gplx/dbs/Db_rdr__basic.java b/140_dbs/src/gplx/dbs/Db_rdr__basic.java
index 0765b523f..8efd84063 100644
--- a/140_dbs/src/gplx/dbs/Db_rdr__basic.java
+++ b/140_dbs/src/gplx/dbs/Db_rdr__basic.java
@@ -19,7 +19,8 @@ package gplx.dbs; import gplx.*;
import java.sql.ResultSet;
public class Db_rdr__basic implements Db_rdr {
protected ResultSet rdr;
- public void Ctor(ResultSet rdr, String sql) {this.rdr = rdr; this.sql = sql;}
+ private Db_stmt stmt;
+ public void Ctor(Db_stmt stmt, ResultSet rdr, String sql) {this.stmt = stmt; this.rdr = rdr; this.sql = sql;}
public String Sql() {return sql;} private String sql;
public boolean Move_next() {
try {return rdr.next();}
@@ -45,5 +46,9 @@ public class Db_rdr__basic implements Db_rdr {
@gplx.Virtual public byte Read_byte(String k) {try {return Byte_.cast_(rdr.getObject(k));} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Byte_.Cls_val_name, Err_.Message_lang(e));}}
@gplx.Virtual public boolean Read_bool_by_byte(int i) {try {return rdr.getByte(i + 1) == 1;} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Bool_.Cls_val_name, Err_.Message_lang(e));}}
@gplx.Virtual public boolean Read_bool_by_byte(String k) {try {return Byte_.cast_(rdr.getObject(k)) == 1;} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Bool_.Cls_val_name, Err_.Message_lang(e));}}
- @gplx.Virtual public void Rls() {try {rdr.close();} catch (Exception e) {throw Err_.new_("close failed: err={0}", Err_.Message_lang(e));}}
+ @gplx.Virtual public void Rls() {
+ try {rdr.close();}
+ catch (Exception e) {throw Err_.new_("close failed: err={0}", Err_.Message_lang(e));}
+ if (stmt != null) stmt.Rls();
+ }
}
diff --git a/140_dbs/src/gplx/dbs/Db_stmt.java b/140_dbs/src/gplx/dbs/Db_stmt.java
index 45eeac3aa..735d5475a 100644
--- a/140_dbs/src/gplx/dbs/Db_stmt.java
+++ b/140_dbs/src/gplx/dbs/Db_stmt.java
@@ -53,7 +53,8 @@ public interface Db_stmt extends RlsAble {
int Exec_update();
int Exec_delete();
DataRdr Exec_select();
- Db_rdr Exec_select_as_rdr();
+ Db_rdr Exec_select__rls_manual();
+ Db_rdr Exec_select__rls_auto();
Object Exec_select_val();
void Ctor_stmt(Db_engine engine, Db_qry qry);
Db_stmt Clear();
diff --git a/140_dbs/src/gplx/dbs/Db_stmt_bldr.java b/140_dbs/src/gplx/dbs/Db_stmt_bldr.java
index bd000fa37..acb27774c 100644
--- a/140_dbs/src/gplx/dbs/Db_stmt_bldr.java
+++ b/140_dbs/src/gplx/dbs/Db_stmt_bldr.java
@@ -38,8 +38,8 @@ public class Db_stmt_bldr {
default: throw Err_.unhandled(cmd_mode);
}
}
- public void Batch_bgn() {conn.Txn_mgr().Txn_bgn_if_none();}
- public void Batch_end() {conn.Txn_mgr().Txn_end_all();}
+ public void Batch_bgn() {conn.Txn_bgn(tbl_name);}
+ public void Batch_end() {conn.Txn_end();}
public void Rls() {
create = Db_stmt_.Rls(create);
update = Db_stmt_.Rls(update);
diff --git a/140_dbs/src/gplx/dbs/Db_txn_mgr.java b/140_dbs/src/gplx/dbs/Db_txn_mgr.java
deleted file mode 100644
index 0ec437c0e..000000000
--- a/140_dbs/src/gplx/dbs/Db_txn_mgr.java
+++ /dev/null
@@ -1,40 +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 .
-*/
-package gplx.dbs; import gplx.*;
-import gplx.dbs.engines.*;
-public class Db_txn_mgr {
- public Db_txn_mgr(Db_engine engine) {this.engine = engine;} private final Db_engine engine;
- public int Txn_depth() {return txn_depth;} int txn_depth; // NOTE: only support 1 level for now;
- public void Txn_bgn_if_none() {if (txn_depth == 0) this.Txn_bgn();}
- public void Txn_bgn() {
- engine.Txn_bgn();
- ++txn_depth;
- }
- public void Txn_end_all() {this.Txn_end();}
- public void Txn_end() {
- if (txn_depth == 0) return;
- engine.Txn_end();
- --txn_depth;
- txn_count = 0;
- }
- public void Txn_end_all_bgn_if_none() {
- this.Txn_end_all();
- this.Txn_bgn_if_none();
- }
- public int Txn_count() {return txn_count;} public void Txn_count_(int v) {txn_count = v;} int txn_count;
-}
diff --git a/140_dbs/src/gplx/dbs/engines/Db_engine.java b/140_dbs/src/gplx/dbs/engines/Db_engine.java
index 588e566e9..1a044a1c1 100644
--- a/140_dbs/src/gplx/dbs/engines/Db_engine.java
+++ b/140_dbs/src/gplx/dbs/engines/Db_engine.java
@@ -18,20 +18,24 @@ along with this program. If not, see .
package gplx.dbs.engines; import gplx.*; import gplx.dbs.*;
public interface Db_engine {
String Tid();
- Db_url Url();
- Db_engine New_clone(Db_url url);
- Db_rdr New_rdr_by_obj(Object o, String sql); // Object o:ResultSet if desktop; Cursor if android
+ Db_conn_info Conn_info();
+ Db_engine New_clone(Db_conn_info url);
+ Db_rdr New_rdr__rls_manual (Object rdr_obj, String sql); // Object o:ResultSet if desktop; Cursor if android
+ Db_rdr New_rdr__rls_auto (Db_stmt stmt, Object rdr_obj, String sql); // Object o:ResultSet if desktop; Cursor if android
Db_stmt New_stmt_prep(Db_qry qry);
Object New_stmt_prep_as_obj(String sql);
DataRdr New_rdr(java.sql.ResultSet rdr, String sql);
- void Txn_bgn();
+ void Txn_bgn(String name);
void Txn_end();
+ void Txn_cxl();
+ void Txn_sav();
void Conn_open();
void Conn_term();
Object Exec_as_obj(Db_qry qry);
- 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);
- void Exec_env_db_attach(String alias, Io_url db_url);
- void Exec_env_db_detach(String alias);
+ void Ddl_create_tbl(Db_meta_tbl meta);
+ void Ddl_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary);
+ void Ddl_append_fld(String tbl, Db_meta_fld fld);
+ void Ddl_delete_tbl(String tbl);
+ void Env_db_attach(String alias, Io_url db_url);
+ void Env_db_detach(String alias);
}
diff --git a/140_dbs/src/gplx/dbs/engines/Db_engine_sql_base.java b/140_dbs/src/gplx/dbs/engines/Db_engine_sql_base.java
index 493c8e8a2..cd6dfc59a 100644
--- a/140_dbs/src/gplx/dbs/engines/Db_engine_sql_base.java
+++ b/140_dbs/src/gplx/dbs/engines/Db_engine_sql_base.java
@@ -19,19 +19,18 @@ package gplx.dbs.engines; import gplx.*; import gplx.dbs.*;
import java.sql.*;
import gplx.dbs.engines.*; import gplx.dbs.qrys.*; import gplx.dbs.sqls.*;
public abstract class Db_engine_sql_base implements Db_engine {
- @gplx.Internal protected void Ctor(Db_url url) {this.url = url;}
+ @gplx.Internal protected void Ctor(Db_conn_info conn_info) {this.conn_info = conn_info;}
public abstract String Tid();
- public Db_url Url() {return url;} protected Db_url url;
- public abstract Db_engine New_clone(Db_url url);
- public Db_rdr New_rdr_by_obj(Object rdr, String sql) {
- Db_rdr__basic rv = (Db_rdr__basic)New_rdr_clone();
- rv.Ctor((ResultSet)rdr, sql);
- return rv;
- }
+ public Db_conn_info Conn_info() {return conn_info;} protected Db_conn_info conn_info;
+ public abstract Db_engine New_clone(Db_conn_info conn_info);
+ public Db_rdr New_rdr__rls_manual(Object rdr_obj, String sql) {return New_rdr(null, rdr_obj, sql);}
+ public Db_rdr New_rdr__rls_auto(Db_stmt stmt, Object rdr_obj, String sql) {return New_rdr(stmt, rdr_obj, sql);}
@gplx.Virtual public Db_rdr New_rdr_clone() {return new Db_rdr__basic();}
public Db_stmt New_stmt_prep(Db_qry qry) {return new Db_stmt_cmd(this, qry);}
- public void Txn_bgn() {Exec_as_obj(Db_qry_sql.xtn_("BEGIN TRANSACTION;"));}
- public void Txn_end() {Exec_as_obj(Db_qry_sql.xtn_("COMMIT TRANSACTION;"));}
+ @gplx.Virtual public void Txn_bgn(String name) {Exec_as_obj(Db_qry_sql.xtn_("BEGIN TRANSACTION;"));}
+ @gplx.Virtual public void Txn_end() {Exec_as_obj(Db_qry_sql.xtn_("COMMIT TRANSACTION;"));}
+ @gplx.Virtual public void Txn_cxl() {Exec_as_obj(Db_qry_sql.xtn_("ROLLBACK TRANSACTION;"));}
+ @gplx.Virtual public void Txn_sav() {this.Txn_end(); this.Txn_bgn("");}
public Object Exec_as_obj(Db_qry qry) {
if (qry.Tid() == Db_qry_.Tid_flush) return null; // ignore flush (delete-db) statements
String sql = this.SqlWtr().Xto_str(qry, false); // DBG: Tfds.Write(sql);
@@ -42,7 +41,7 @@ public abstract class Db_engine_sql_base implements Db_engine {
Statement cmd = New_stmt_exec(sql);
return cmd.executeUpdate(sql);
}
- catch (Exception exc) {throw Err_.err_(exc, "exec nonQuery failed").Add("sql", sql).Add("err", Err_.Message_gplx_brief(exc));}
+ catch (Exception exc) {throw Err_.new_("db.engine:exec failed; url={0} sql={1} err={2}", conn_info.Xto_api(), sql, Err_.Message_gplx_brief(exc));}
}
private DataRdr Exec_as_rdr(String sql) {
try {
@@ -51,31 +50,35 @@ public abstract class Db_engine_sql_base implements Db_engine {
ResultSet rdr = cmd.getResultSet();
return New_rdr(rdr, sql);
}
- catch (Exception exc) {throw Err_.err_(exc, "exec reader failed").Add("sql", sql).Add("err", Err_.Message_gplx_brief(exc));}
+ catch (Exception exc) {throw Err_.new_("db.engine:rdr failed; url={0} sql={1} err={2}", conn_info.Xto_api(), sql, Err_.Message_gplx_brief(exc));}
}
- 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) {
+ public void Ddl_create_tbl(Db_meta_tbl tbl) {Exec_as_int(tbl.To_sql_create());}
+ public void 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];
- usr_dlg.Plog_many("", "", "db.idx.create; db=~{0} idx=~{1}", url.Database(), idx.Name());
+ usr_dlg.Plog_many("", "", "creating database index (please wait); db=~{0} idx=~{1}", conn_info.Database(), idx.Name());
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 void Exec_env_db_attach(String alias, Io_url db_url) {}
- @gplx.Virtual public void Exec_env_db_detach(String alias) {}
+ public void Ddl_append_fld(String tbl, Db_meta_fld fld) {Exec_as_int(Db_sqlbldr__sqlite.I.Bld_alter_tbl_add(tbl, fld));}
+ public void Ddl_delete_tbl(String tbl) {Exec_as_int(Db_sqlbldr__sqlite.I.Bld_drop_tbl(tbl));}
+ @gplx.Virtual public void Env_db_attach(String alias, Io_url db_url) {}
+ @gplx.Virtual public void Env_db_detach(String alias) {}
@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();}
+ private Db_rdr New_rdr(Db_stmt stmt, Object rdr, String sql) {
+ Db_rdr__basic rv = (Db_rdr__basic)New_rdr_clone();
+ rv.Ctor(stmt, (ResultSet)rdr, sql);
+ return rv;
+ }
@gplx.Internal protected abstract Connection Conn_new();
- private Connection connection;
+ protected Connection connection;
public void Conn_open() {connection = Conn_new();}
public void Conn_term() {
if (connection == null) return; // connection never opened; just exit
try {connection.close();}
- catch (Exception e) {throw Err_.err_(e, "Conn_term.fail; url={0} err={1}", url.Xto_raw(), Err_.Message_lang(e));}
+ catch (Exception e) {throw Err_.err_(e, "Conn_term.fail; url={0} err={1}", conn_info.Xto_raw(), Err_.Message_lang(e));}
connection = null;
}
public Object New_stmt_prep_as_obj(String sql) {
@@ -90,6 +93,6 @@ public abstract class Db_engine_sql_base implements Db_engine {
}
protected Connection Conn_make_by_url(String url, String uid, String pwd) {
try {return DriverManager.getConnection(url, uid, pwd);}
- catch (SQLException e) {throw Err_.err_(e, "connection open failed").Add("ConnectInfo", Url().Xto_raw());}
+ catch (SQLException e) {throw Err_.err_(e, "connection open failed").Add("ConnectInfo", Conn_info().Xto_raw());}
}
}
diff --git a/140_dbs/src/gplx/dbs/engines/mems/Db_url__mem.java b/140_dbs/src/gplx/dbs/engines/mems/Db_conn_info__mem.java
similarity index 73%
rename from 140_dbs/src/gplx/dbs/engines/mems/Db_url__mem.java
rename to 140_dbs/src/gplx/dbs/engines/mems/Db_conn_info__mem.java
index 7d8f5ef9b..699481a73 100644
--- a/140_dbs/src/gplx/dbs/engines/mems/Db_url__mem.java
+++ b/140_dbs/src/gplx/dbs/engines/mems/Db_conn_info__mem.java
@@ -16,18 +16,18 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.dbs.engines.mems; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*;
-public class Db_url__mem extends Db_url__base {
+public class Db_conn_info__mem extends Db_conn_info__base {
@Override public String Tid() {return Tid_const;} public static final String Tid_const = "mem";
- @Override public Db_url New_self(String raw, GfoMsg m) {
- Db_url__mem rv = new Db_url__mem();
+ @Override public Db_conn_info New_self(String raw, GfoMsg m) {
+ Db_conn_info__mem rv = new Db_conn_info__mem();
rv.Ctor("", m.ReadStr("database"), raw, raw);
return rv;
}
- public static Db_url new_(String database) {
- return Db_url_.parse_(Bld_raw
+ public static Db_conn_info new_(String database) {
+ return Db_conn_info_.parse_(Bld_raw
( "gplx_key", Tid_const
, "database", database
));
}
- public static final Db_url__mem I = new Db_url__mem(); Db_url__mem() {}
+ public static final Db_conn_info__mem I = new Db_conn_info__mem(); Db_conn_info__mem() {}
}
diff --git a/140_dbs/src/gplx/dbs/engines/mems/Db_engine__mem.java b/140_dbs/src/gplx/dbs/engines/mems/Db_engine__mem.java
index 570767834..fccb697df 100644
--- a/140_dbs/src/gplx/dbs/engines/mems/Db_engine__mem.java
+++ b/140_dbs/src/gplx/dbs/engines/mems/Db_engine__mem.java
@@ -18,29 +18,33 @@ along with this program. If not, see .
package gplx.dbs.engines.mems; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*;
public class Db_engine__mem implements Db_engine {
private final HashAdp tbl_hash = HashAdp_.new_();
- Db_engine__mem(Db_url url) {this.url = url;}
- public String Tid() {return Db_url__mem.Tid_const;}
- public Db_url Url() {return url;} private Db_url url;
- public Db_engine New_clone(Db_url url) {return new Db_engine__mem(url);}
+ Db_engine__mem(Db_conn_info conn_info) {this.conn_info = conn_info;}
+ public String Tid() {return Db_conn_info__mem.Tid_const;}
+ public Db_conn_info Conn_info() {return conn_info;} private Db_conn_info conn_info;
+ public Db_engine New_clone(Db_conn_info conn_info) {return new Db_engine__mem(conn_info);}
public Db_stmt New_stmt_prep(Db_qry qry) {return new Db_stmt__mem(this, qry);}
public Mem_tbl Tbls_get(String name) {return (Mem_tbl)tbl_hash.Fetch(name);}
- public void Txn_bgn() {++txn_count;} private int txn_count = 0;
- public void Txn_end() {--txn_count;}
+ public void Txn_bgn(String name) {++txn_count;} private int txn_count = 0;
+ public void Txn_end() {--txn_count;}
+ public void Txn_cxl() {--txn_count;}
+ public void Txn_sav() {this.Txn_end(); this.Txn_bgn("");}
public Object Exec_as_obj(Db_qry qry) {throw Err_.not_implemented_();}
public void Conn_open() {}
public void Conn_term() {
if (txn_count != 0) throw Err_.new_("Conn_term.txns still open; txn_count={0}", txn_count);
}
- public Db_rdr New_rdr_by_obj(Object rdr, String sql) {throw Err_.not_implemented_();}
+ public Db_rdr New_rdr__rls_manual(Object rdr_obj, String sql) {throw Err_.not_implemented_();}
+ public Db_rdr New_rdr__rls_auto(Db_stmt stmt, Object rdr_obj, 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_ddl_create_tbl(Db_meta_tbl meta) {
- Mem_tbl mem_tbl = new Mem_tbl();
+ public void Ddl_create_tbl(Db_meta_tbl meta) {
+ Mem_tbl mem_tbl = new Mem_tbl(meta);
tbl_hash.AddReplace(meta.Name(), mem_tbl);
}
- 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 void Exec_env_db_attach(String alias, Io_url db_url) {}
- public void Exec_env_db_detach(String alias) {}
+ public void Ddl_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {} // TODO: implement unique index
+ public void Ddl_append_fld(String tbl, Db_meta_fld fld) {}
+ public void Ddl_delete_tbl(String tbl) {}
+ public void Env_db_attach(String alias, Io_url db_url) {}
+ public void Env_db_detach(String alias) {}
public static final Db_engine__mem _ = new Db_engine__mem(); Db_engine__mem() {}
}
diff --git a/140_dbs/src/gplx/dbs/engines/mems/Db_stmt__mem.java b/140_dbs/src/gplx/dbs/engines/mems/Db_stmt__mem.java
index 1811c2b8e..c4ef1c0da 100644
--- a/140_dbs/src/gplx/dbs/engines/mems/Db_stmt__mem.java
+++ b/140_dbs/src/gplx/dbs/engines/mems/Db_stmt__mem.java
@@ -18,12 +18,13 @@ along with this program. If not, see .
package gplx.dbs.engines.mems; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*;
public class Db_stmt__mem implements Db_stmt {
private static final String Key_na = ""; // key is not_available; only called by procs with signature of Val( v);
- private final ListAdp val_list = ListAdp_.new_();
+ private final OrderedHash val_list = OrderedHash_.new_();
public Db_stmt__mem(Db_engine__mem engine, Db_qry qry) {Ctor_stmt(engine, qry);} private Db_engine__mem engine;
public void Ctor_stmt(Db_engine engine, Db_qry qry) {this.engine = (Db_engine__mem)engine; this.qry = qry;}
public HashAdp Crts() {return crt_hash;} private final HashAdp crt_hash = HashAdp_.new_();
public int Args_len() {return val_list.Count();}
- public Object Args_get_at(int i) {return val_list.FetchAt(i);}
+ public Object Args_get_at(int i) {return val_list.FetchAt(i);}
+ public Object Args_get_by(String k) {return val_list.Fetch(k);}
public Db_qry Qry() {return qry;} private Db_qry qry;
public Db_stmt Reset_stmt() {return this;}
public Db_stmt Clear() {
@@ -117,14 +118,15 @@ public class Db_stmt__mem implements Db_stmt {
return tbl.Delete(this);
}
public DataRdr Exec_select() {throw Err_.not_implemented_();}
- public Db_rdr Exec_select_as_rdr() {
+ public Db_rdr Exec_select__rls_auto() {return this.Exec_select__rls_manual();}
+ public Db_rdr Exec_select__rls_manual() {
Mem_tbl tbl = engine.Tbls_get(qry.Base_table());
return tbl.Select(this);
- }
+ }
public Object Exec_select_val() {throw Err_.not_implemented_();}
private void Add(String k, boolean where, Object v) {
- if (k == Db_meta_fld.Key_null) return; // key is explicitly null; ignore; allows version_2+ type definitions
- val_list.Add(v);
+ if (k == Db_meta_fld.Key_null) return; // key is explicitly null; ignore; allows schema_2+ type definitions
+ val_list.Add_if_new(k, v); // NOTE: only add if new; WHERE with IN will call Add many times; fld_ttl IN ('A.png', 'B.png');
if (where) {
ListAdp list = (ListAdp)crt_hash.Fetch(k);
if (list == null) {
diff --git a/140_dbs/src/gplx/dbs/engines/mems/Mem_tbl.java b/140_dbs/src/gplx/dbs/engines/mems/Mem_tbl.java
index 4506896c9..ee5b06cbf 100644
--- a/140_dbs/src/gplx/dbs/engines/mems/Mem_tbl.java
+++ b/140_dbs/src/gplx/dbs/engines/mems/Mem_tbl.java
@@ -16,18 +16,33 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.dbs.engines.mems; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*;
-import gplx.core.criterias.*; import gplx.dbs.qrys.*;
+import gplx.core.primitives.*; import gplx.core.criterias.*; import gplx.dbs.qrys.*;
public class Mem_tbl {
private final ListAdp rows = ListAdp_.new_(); private final ListAdp where_rows = ListAdp_.new_();
+ private final HashAdp autonum_hash = HashAdp_.new_();
+ private final Db_meta_tbl meta;
+ public Mem_tbl(Db_meta_tbl meta) {this.meta = meta;}
public int Insert(Db_stmt__mem stmt) {
- Db_qry_insert qry = (Db_qry_insert)stmt.Qry();
- String[] cols = qry.Cols_for_insert(); int len = cols.length;
Mem_itm itm = new Mem_itm();
- for (int i = 0; i < len; ++i)
- itm.Set_by(cols[i], stmt.Args_get_at(i));
+ Db_meta_fld[] flds = meta.Flds();
+ int len = flds.length;
+ for (int i = 0; i < len; ++i) {
+ Db_meta_fld fld = flds[i];
+ String fld_name = fld.Name();
+ Object val = fld.Autonum() ? Autonum_calc(fld_name) : stmt.Args_get_by(fld_name);
+ itm.Set_by(fld_name, val);
+ }
rows.Add(itm);
return 1;
}
+ private int Autonum_calc(String name) {
+ Int_obj_ref autonum_itm = (Int_obj_ref)autonum_hash.Fetch(name);
+ if (autonum_itm == null) {
+ autonum_itm = Int_obj_ref.new_(0);
+ autonum_hash.Add(name, autonum_itm);
+ }
+ return autonum_itm.Val_add();
+ }
public int Update(Db_stmt__mem stmt) {
Db_qry_update qry = (Db_qry_update)stmt.Qry();
qry.Where().Val_from_args(stmt.Crts());
diff --git a/140_dbs/src/gplx/dbs/engines/mysql/Mysql_url.java b/140_dbs/src/gplx/dbs/engines/mysql/Mysql_conn_info.java
similarity index 76%
rename from 140_dbs/src/gplx/dbs/engines/mysql/Mysql_url.java
rename to 140_dbs/src/gplx/dbs/engines/mysql/Mysql_conn_info.java
index ac27421e1..135ee0800 100644
--- a/140_dbs/src/gplx/dbs/engines/mysql/Mysql_url.java
+++ b/140_dbs/src/gplx/dbs/engines/mysql/Mysql_conn_info.java
@@ -16,12 +16,12 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.dbs.engines.mysql; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*;
-public class Mysql_url extends Db_url__base {
+public class Mysql_conn_info extends Db_conn_info__base {
@Override public String Tid() {return Tid_const;} public static final String Tid_const = "mysql";
public String Uid() {return uid;} private String uid;
public String Pwd() {return pwd;} private String pwd;
- public static Db_url new_(String server, String database, String uid, String pwd) {
- return Db_url_.parse_(Bld_raw
+ public static Db_conn_info new_(String server, String database, String uid, String pwd) {
+ return Db_conn_info_.parse_(Bld_raw
( "gplx_key", Tid_const
, "server", server
, "database", database
@@ -30,12 +30,12 @@ public class Mysql_url extends Db_url__base {
, "charset", "utf8"
));
}
- @Override public Db_url New_self(String raw, GfoMsg m) {
- Mysql_url rv = new Mysql_url();
+ @Override public Db_conn_info New_self(String raw, GfoMsg m) {
+ Mysql_conn_info rv = new Mysql_conn_info();
rv.Ctor(m.ReadStr("server"), m.ReadStr("database"), raw, BldApi(m, KeyVal_.new_("charset", "utf8")));
rv.uid = m.ReadStr("uid");
rv.pwd = m.ReadStr("pwd");
return rv;
}
- public static final Mysql_url _ = new Mysql_url(); Mysql_url() {}
+ public static final Mysql_conn_info _ = new Mysql_conn_info(); Mysql_conn_info() {}
}
diff --git a/140_dbs/src/gplx/dbs/engines/mysql/Mysql_engine.java b/140_dbs/src/gplx/dbs/engines/mysql/Mysql_engine.java
index adc217549..14aec8bbf 100644
--- a/140_dbs/src/gplx/dbs/engines/mysql/Mysql_engine.java
+++ b/140_dbs/src/gplx/dbs/engines/mysql/Mysql_engine.java
@@ -19,17 +19,17 @@ package gplx.dbs.engines.mysql; import gplx.*; import gplx.dbs.*; import gplx.db
import gplx.stores.*; import gplx.dbs.engines.*; import gplx.dbs.sqls.*;
import java.sql.*;
public class Mysql_engine extends Db_engine_sql_base {
- @Override public String Tid() {return Mysql_url.Tid_const;}
+ @Override public String Tid() {return Mysql_conn_info.Tid_const;}
@Override public Sql_qry_wtr SqlWtr() {return Sql_qry_wtr_.new_escape_backslash();}
- @Override public Db_engine New_clone(Db_url connectInfo) {
+ @Override public Db_engine New_clone(Db_conn_info connectInfo) {
Mysql_engine rv = new Mysql_engine();
rv.Ctor(connectInfo);
return rv;
}
@Override public DataRdr New_rdr(ResultSet rdr, String commandText) {return Mysql_rdr.new_(rdr, commandText);}
@gplx.Internal @Override protected Connection Conn_new() {
- Mysql_url url_as_mysql = (Mysql_url)url;
- return Conn_make_by_url("jdbc:mysql://localhost/" + url_as_mysql.Database() + "?characterEncoding=UTF8", url_as_mysql.Uid(), url_as_mysql.Pwd());
+ Mysql_conn_info conn_info_as_mysql = (Mysql_conn_info)conn_info;
+ return Conn_make_by_url("jdbc:mysql://localhost/" + conn_info_as_mysql.Database() + "?characterEncoding=UTF8", conn_info_as_mysql.Uid(), conn_info_as_mysql.Pwd());
}
public static final Mysql_engine _ = new Mysql_engine(); Mysql_engine() {}
}
diff --git a/140_dbs/src/gplx/dbs/engines/nulls/Null_url.java b/140_dbs/src/gplx/dbs/engines/nulls/Null_conn_info.java
similarity index 77%
rename from 140_dbs/src/gplx/dbs/engines/nulls/Null_url.java
rename to 140_dbs/src/gplx/dbs/engines/nulls/Null_conn_info.java
index ce99e5120..ea017b24b 100644
--- a/140_dbs/src/gplx/dbs/engines/nulls/Null_url.java
+++ b/140_dbs/src/gplx/dbs/engines/nulls/Null_conn_info.java
@@ -16,8 +16,8 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.dbs.engines.nulls; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*;
-public class Null_url extends Db_url__base {
+public class Null_conn_info extends Db_conn_info__base {
@Override public String Tid() {return Tid_const;} public static final String Tid_const = "null_db";
- @Override public Db_url New_self(String raw, GfoMsg m) {return this;}
- public static final Null_url _ = new Null_url(); Null_url() {this.Ctor("", "", "gplx_key=null_db", "");}
+ @Override public Db_conn_info New_self(String raw, GfoMsg m) {return this;}
+ public static final Null_conn_info _ = new Null_conn_info(); Null_conn_info() {this.Ctor("", "", "gplx_key=null_db", "");}
}
diff --git a/140_dbs/src/gplx/dbs/engines/nulls/Null_engine.java b/140_dbs/src/gplx/dbs/engines/nulls/Null_engine.java
index 8f7a3fac4..1becb9db6 100644
--- a/140_dbs/src/gplx/dbs/engines/nulls/Null_engine.java
+++ b/140_dbs/src/gplx/dbs/engines/nulls/Null_engine.java
@@ -15,24 +15,28 @@ 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 .
*/
-package gplx.dbs.engines.nulls; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*;
+ package gplx.dbs.engines.nulls; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*;
public class Null_engine implements Db_engine {
- public String Tid() {return Null_url.Tid_const;}
- public Db_url Url() {return Db_url_.Null;}
+ public String Tid() {return Null_conn_info.Tid_const;}
+ public Db_conn_info Conn_info() {return Db_conn_info_.Null;}
public void Conn_open() {}
public void Conn_term() {}
- public Db_engine New_clone(Db_url url) {return this;}
- public Db_rdr New_rdr_by_obj(Object o, String sql) {return Db_rdr_.Null;}
+ public Db_engine New_clone(Db_conn_info url) {return this;}
+ public Db_rdr New_rdr__rls_manual (Object rdr_obj, String sql) {return Db_rdr_.Empty;}
+ public Db_rdr New_rdr__rls_auto (Db_stmt stmt, Object rdr_obj, String sql) {return Db_rdr_.Empty;}
public Db_stmt New_stmt_prep(Db_qry qry) {return Db_stmt_.Null;}
public Object New_stmt_prep_as_obj(String sql) {throw Err_.not_implemented_();}
public DataRdr New_rdr(java.sql.ResultSet rdr, String sql) {return DataRdr_.Null;}
- public void Txn_bgn() {}
- public void Txn_end() {}
+ public void Txn_bgn(String name) {}
+ public void Txn_end() {}
+ public void Txn_cxl() {}
+ public void Txn_sav() {}
public Object Exec_as_obj(Db_qry cmd) {return cmd.Exec_is_rdr() ? (Object)DataRdr_.Null : -1;}
- 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 void Exec_env_db_attach(String alias, Io_url db_url) {}
- public void Exec_env_db_detach(String alias) {}
+ public void Ddl_create_tbl(Db_meta_tbl meta) {}
+ public void Ddl_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {}
+ public void Ddl_append_fld(String tbl, Db_meta_fld fld) {}
+ public void Ddl_delete_tbl(String tbl) {}
+ public void Env_db_attach(String alias, Io_url db_url) {}
+ public void Env_db_detach(String alias) {}
public static final Null_engine _ = new Null_engine(); Null_engine() {}
}
diff --git a/140_dbs/src/gplx/dbs/engines/postgres/Postgres_url.java b/140_dbs/src/gplx/dbs/engines/postgres/Postgres_conn_info.java
similarity index 76%
rename from 140_dbs/src/gplx/dbs/engines/postgres/Postgres_url.java
rename to 140_dbs/src/gplx/dbs/engines/postgres/Postgres_conn_info.java
index d8663b08c..4eb51c976 100644
--- a/140_dbs/src/gplx/dbs/engines/postgres/Postgres_url.java
+++ b/140_dbs/src/gplx/dbs/engines/postgres/Postgres_conn_info.java
@@ -16,12 +16,12 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.dbs.engines.postgres; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*;
-public class Postgres_url extends Db_url__base {
+public class Postgres_conn_info extends Db_conn_info__base {
@Override public String Tid() {return Tid_const;} public static final String Tid_const = "postgresql";
public String Uid() {return uid;} private String uid;
public String Pwd() {return pwd;} private String pwd;
- public static Db_url new_(String server, String database, String uid, String pwd) {
- return Db_url_.parse_(Bld_raw
+ public static Db_conn_info new_(String server, String database, String uid, String pwd) {
+ return Db_conn_info_.parse_(Bld_raw
( "gplx_key", Tid_const
, "server", server
, "database", database
@@ -31,12 +31,12 @@ public class Postgres_url extends Db_url__base {
, "encoding", "unicode" // needed for 1.1 conn; otherwise, ascii
));
}
- @Override public Db_url New_self(String raw, GfoMsg m) {
- Postgres_url rv = new Postgres_url();
+ @Override public Db_conn_info New_self(String raw, GfoMsg m) {
+ Postgres_conn_info rv = new Postgres_conn_info();
rv.Ctor(m.ReadStr("server"), m.ReadStr("database"), raw, BldApi(m, KeyVal_.new_("encoding", "unicode")));
rv.uid = m.ReadStr("user id");
rv.pwd = m.ReadStr("password");
return rv;
}
- public static final Postgres_url _ = new Postgres_url(); Postgres_url() {}
+ public static final Postgres_conn_info _ = new Postgres_conn_info(); Postgres_conn_info() {}
}
diff --git a/140_dbs/src/gplx/dbs/engines/postgres/Postgres_engine.java b/140_dbs/src/gplx/dbs/engines/postgres/Postgres_engine.java
index 809cfbb81..65217fb6c 100644
--- a/140_dbs/src/gplx/dbs/engines/postgres/Postgres_engine.java
+++ b/140_dbs/src/gplx/dbs/engines/postgres/Postgres_engine.java
@@ -19,17 +19,17 @@ package gplx.dbs.engines.postgres; import gplx.*; import gplx.dbs.*; import gplx
import gplx.stores.*; import gplx.dbs.engines.*; import gplx.dbs.sqls.*;
import java.sql.*;
public class Postgres_engine extends Db_engine_sql_base {
- @Override public String Tid() {return Postgres_url.Tid_const;}
+ @Override public String Tid() {return Postgres_conn_info.Tid_const;}
@Override public Sql_qry_wtr SqlWtr() {return Sql_qry_wtr_.new_escape_backslash();}
- @Override public Db_engine New_clone(Db_url connectInfo) {
+ @Override public Db_engine New_clone(Db_conn_info connectInfo) {
Postgres_engine rv = new Postgres_engine();
rv.Ctor(connectInfo);
return rv;
}
@Override public DataRdr New_rdr(ResultSet rdr, String commandText) {return Db_data_rdr_.new_(rdr, commandText);}
@gplx.Internal @Override protected Connection Conn_new() {
- Postgres_url url_as_postgres = (Postgres_url)url;
- return Conn_make_by_url("jdbc:" + url_as_postgres.Tid() + "://localhost/" + url_as_postgres.Database(), url_as_postgres.Uid(), url_as_postgres.Pwd());
+ Postgres_conn_info conn_info_as_postgres = (Postgres_conn_info)conn_info;
+ return Conn_make_by_url("jdbc:" + conn_info_as_postgres.Tid() + "://localhost/" + conn_info_as_postgres.Database(), conn_info_as_postgres.Uid(), conn_info_as_postgres.Pwd());
}
public static final Postgres_engine _ = new Postgres_engine(); Postgres_engine() {}
}
diff --git a/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_url.java b/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_conn_info.java
similarity index 75%
rename from 140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_url.java
rename to 140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_conn_info.java
index a566f787e..aacd38018 100644
--- a/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_url.java
+++ b/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_conn_info.java
@@ -16,32 +16,32 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.dbs.engines.sqlite; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*;
-public class Sqlite_url extends Db_url__base {
+public class Sqlite_conn_info extends Db_conn_info__base {
@Override public String Tid() {return Tid_const;} public static final String Tid_const = "sqlite";
public Io_url Url() {return url;} private Io_url url;
- @Override public Db_url New_self(String raw, GfoMsg m) {
- Sqlite_url rv = new Sqlite_url();
+ @Override public Db_conn_info New_self(String raw, GfoMsg m) {
+ Sqlite_conn_info rv = new Sqlite_conn_info();
String url = m.ReadStr("data source");
rv.url = Io_url_.new_any_(url);
rv.Ctor("", url, raw, BldApi(m, KeyVal_.new_("version", "3")));
rv.database = rv.url.NameOnly();
return rv;
}
- public static Db_url load_(Io_url url) {
- return Db_url_.parse_(Bld_raw
+ public static Db_conn_info load_(Io_url url) {
+ return Db_conn_info_.parse_(Bld_raw
( "gplx_key" , Tid_const
, "data source" , url.Xto_api()
, "version" , "3"
));
}
- public static Db_url make_(Io_url url) {
+ public static Db_conn_info make_(Io_url url) {
Io_mgr._.CreateDirIfAbsent(url.OwnerDir());
- return Db_url_.parse_(Bld_raw
+ return Db_conn_info_.parse_(Bld_raw
( "gplx_key" , Tid_const
, "data source" , url.Xto_api()
, "version" , "3"
));
}
- public static final Sqlite_url _ = new Sqlite_url(); Sqlite_url() {}
+ public static final Sqlite_conn_info _ = new Sqlite_conn_info(); Sqlite_conn_info() {}
}
\ No newline at end of file
diff --git a/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_engine.java b/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_engine.java
index 3e16370e1..217ffe944 100644
--- a/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_engine.java
+++ b/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_engine.java
@@ -20,16 +20,24 @@ import java.sql.*;
import gplx.stores.*; import gplx.dbs.engines.*; import gplx.dbs.engines.sqlite.*;
import gplx.dbs.qrys.*;
public class Sqlite_engine extends Db_engine_sql_base {
- @Override public String Tid() {return Sqlite_url.Tid_const;}
- @Override public Db_engine New_clone(Db_url connectInfo) {
+ private final Sqlite_txn_mgr txn_mgr;
+ Sqlite_engine() {
+ this.txn_mgr = new Sqlite_txn_mgr(this);
+ }
+ @Override public String Tid() {return Sqlite_conn_info.Tid_const;}
+ @Override public Db_engine New_clone(Db_conn_info connectInfo) {
Sqlite_engine rv = new Sqlite_engine();
rv.Ctor(connectInfo);
return rv;
}
@Override public DataRdr New_rdr(ResultSet rdr, String commandText) {return Sqlite_rdr.new_(rdr, commandText);}
@Override public Db_rdr New_rdr_clone() {return new Db_rdr__sqlite();}
- @Override public void Exec_env_db_attach(String alias, Io_url db_url) {Exec_as_int(String_.Format("ATTACH '{0}' AS {1};", db_url.Raw(), alias));}
- @Override public void Exec_env_db_detach(String alias) {Exec_as_int(String_.Format("DETACH {0};", alias));}
+ @Override public void Env_db_attach(String alias, Io_url db_url) {Exec_as_int(String_.Format("ATTACH '{0}' AS {1};", db_url.Raw(), alias));}
+ @Override public void Env_db_detach(String alias) {Exec_as_int(String_.Format("DETACH {0};", alias));}
+ @Override public void Txn_bgn(String name) {txn_mgr.Txn_bgn(name);}
+ @Override public void Txn_end() {txn_mgr.Txn_end();}
+ @Override public void Txn_cxl() {txn_mgr.Txn_cxl();}
+ @Override public void Txn_sav() {txn_mgr.Txn_sav();}
static boolean loaded = false;
@gplx.Internal @Override protected Connection Conn_new() {
if (!loaded) {
@@ -39,24 +47,11 @@ public class Sqlite_engine extends Db_engine_sql_base {
catch (ClassNotFoundException e) {throw Err_.new_("could not load sqlite jdbc driver");}
loaded = true;
}
- Sqlite_url url_as_sqlite = (Sqlite_url)url;
- return Conn_make_by_url("jdbc:sqlite://" + String_.Replace(url_as_sqlite.Url().Raw(), "\\", "/"), "", "");
+ Sqlite_conn_info conn_info_as_sqlite = (Sqlite_conn_info)conn_info;
+ Connection rv = Conn_make_by_url("jdbc:sqlite://" + String_.Replace(conn_info_as_sqlite.Url().Raw(), "\\", "/"), "", "");
+ return rv;
}
- private boolean pragma_needed = true;
- @Override public void Txn_bgn() {
-// Execute(Db_qry_sql.xtn_("PRAGMA ENCODING=\"UTF-8\";"));
-// Execute(Db_qry_sql.xtn_("PRAGMA journal_mode = OFF;")); // will cause out of memory
-// Execute(Db_qry_sql.xtn_("PRAGMA journal_mode = MEMORY;"));
- if (pragma_needed) {
- Exec_as_obj(Db_qry_sql.xtn_("PRAGMA synchronous = OFF;"));
- pragma_needed = false;
- }
-// Execute(Db_qry_sql.xtn_("PRAGMA temp_store = MEMORY;"));
-// Execute(Db_qry_sql.xtn_("PRAGMA locking_mode = EXCLUSIVE;"));
-// Execute(Db_qry_sql.xtn_("PRAGMA cache_size=4000;")); // too many will also cause out of memory
- Exec_as_obj(Db_qry_sql.xtn_("BEGIN TRANSACTION;"));
- }
- public static final Sqlite_engine _ = new Sqlite_engine(); Sqlite_engine() {}
+ public static final Sqlite_engine _ = new Sqlite_engine();
}
class Db_rdr__sqlite extends Db_rdr__basic { @Override public byte Read_byte(int i) {try {return (byte)rdr.getInt(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Byte_.Cls_val_name, Err_.Message_lang(e));}}
@Override public byte Read_byte(String k) {try {return (byte)Int_.cast_(rdr.getObject(k));} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Byte_.Cls_val_name, Err_.Message_lang(e));}}
diff --git a/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_engine_.java b/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_engine_.java
index 856719eb2..0b5195ca7 100644
--- a/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_engine_.java
+++ b/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_engine_.java
@@ -55,7 +55,6 @@ public class Sqlite_engine_ {
p.Exec_qry(qry);
}
public static void Idx_create(Gfo_usr_dlg usr_dlg, Db_conn conn, String tbl, Db_meta_idx[] idx_ary) {
- conn.Txn_mgr().Txn_end_all(); // commit any pending transactions
int len = idx_ary.length;
for (int i = 0; i < len; ++i) {
Db_meta_idx idx = idx_ary[i];
@@ -68,7 +67,6 @@ public class Sqlite_engine_ {
public static void Idx_create(Db_conn p, Db_idx_itm... idxs) {Idx_create(Gfo_usr_dlg_.Null, p, "", idxs);}
public static void Idx_create(Gfo_usr_dlg usr_dlg, Db_conn p, String file_id, Db_idx_itm... idxs) {
int len = idxs.length;
- p.Txn_mgr().Txn_end_all(); // commit any pending transactions
for (int i = 0; i < len; i++) {
String index = idxs[i].Xto_sql();
usr_dlg.Plog_many("", "", "creating index: ~{0} ~{1}", file_id, index);
@@ -79,7 +77,7 @@ public class Sqlite_engine_ {
public static Db_conn Conn_load_or_make_(Io_url url, Bool_obj_ref created) {
boolean exists = Io_mgr._.ExistsFil(url);
created.Val_(!exists);
- Db_url connect = exists ? Sqlite_url.load_(url) : Sqlite_url.make_(url);
+ Db_conn_info connect = exists ? Sqlite_conn_info.load_(url) : Sqlite_conn_info.make_(url);
Db_conn p = Db_conn_pool.I.Get_or_new(connect);
if (!exists)
Pragma_page_size(p, 4096);
diff --git a/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_txn_mgr.java b/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_txn_mgr.java
new file mode 100644
index 000000000..0f75d15d6
--- /dev/null
+++ b/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_txn_mgr.java
@@ -0,0 +1,70 @@
+/*
+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 .
+*/
+package gplx.dbs.engines.sqlite; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*;
+import gplx.dbs.qrys.*;
+public class Sqlite_txn_mgr {
+ private final ListAdp txn_list = ListAdp_.new_();
+ public Sqlite_txn_mgr(Db_engine engine) {this.engine = engine;} private final Db_engine engine;
+ private boolean pragma_needed = Bool_.Y, txn_started = Bool_.N; // NOTE: txns only support 1 level; SQLite fails when nesting transactions; DATE:2015-03-11
+ public void Txn_bgn(String name) {
+ if (String_.Len_eq_0(name)) name = "unnamed";
+ if (pragma_needed) {
+ pragma_needed = false;
+ engine.Exec_as_obj(Db_qry_sql.xtn_("PRAGMA synchronous = OFF;"));
+ }
+// Execute(Db_qry_sql.xtn_("PRAGMA ENCODING=\"UTF-8\";"));
+// Execute(Db_qry_sql.xtn_("PRAGMA journal_mode = OFF;")); // will cause out of memory
+// Execute(Db_qry_sql.xtn_("PRAGMA journal_mode = MEMORY;"));
+// Execute(Db_qry_sql.xtn_("PRAGMA temp_store = MEMORY;"));
+// Execute(Db_qry_sql.xtn_("PRAGMA locking_mode = EXCLUSIVE;"));
+// Execute(Db_qry_sql.xtn_("PRAGMA cache_size=4000;")); // too many will also cause out of memory
+ if (txn_started) {
+ engine.Exec_as_obj(Db_qry_sql.xtn_(String_.Format("SAVEPOINT {0};", name)));
+ }
+ else {
+ txn_started = true;
+ engine.Exec_as_obj(Db_qry_sql.xtn_("BEGIN TRANSACTION;"));
+ }
+ txn_list.Add(name);
+ }
+ public void Txn_end() {
+ if (txn_list.Count() == 0) {Gfo_usr_dlg_.I.Warn_many("", "", "no txns in stack;"); return;}
+ String txn_last = (String)txn_list.PopLast();
+ if (txn_list.Count() == 0) {// no txns left; commit it
+ engine.Exec_as_obj(Db_qry_sql.xtn_("COMMIT TRANSACTION;"));
+ txn_started = false;
+ }
+ else
+ engine.Exec_as_obj(Db_qry_sql.xtn_(String_.Format("RELEASE SAVEPOINT {0};", txn_last)));
+ }
+ public void Txn_cxl() {
+ if (txn_list.Count() == 0) {Gfo_usr_dlg_.I.Warn_many("", "", "no txns in stack;"); return;}
+ String txn_last = (String)txn_list.PopLast();
+ if (txn_list.Count() == 0) {// no txns left; rollback
+ engine.Exec_as_obj(Db_qry_sql.xtn_("ROLLBACK TRANSACTION;"));
+ txn_started = false;
+ }
+ else
+ engine.Exec_as_obj(Db_qry_sql.xtn_(String_.Format("ROLBACK TRANSACTION TO SAVEPOINT {0};", txn_last)));
+ }
+ public void Txn_sav() {
+ if (txn_list.Count() == 0) {Gfo_usr_dlg_.I.Warn_many("", "", "no txns in stack;"); return;}
+ String name = (String)txn_list.FetchAt(txn_list.Count() - 1);
+ this.Txn_end(); this.Txn_bgn(name);
+ }
+}
diff --git a/140_dbs/src/gplx/dbs/engines/tdbs/TdbConnectInfo_tst.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbConnectInfo_tst.java
index 0da565272..cd17b6da0 100644
--- a/140_dbs/src/gplx/dbs/engines/tdbs/TdbConnectInfo_tst.java
+++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbConnectInfo_tst.java
@@ -19,14 +19,14 @@ package gplx.dbs.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs
import org.junit.*;
public class TdbConnectInfo_tst {
@Test public void Full() {
- Db_url connectInfo = Db_url_.parse_("gplx_key=tdb;url=C:\\dir\\xmpl.tdb;format=dsv;");
+ Db_conn_info connectInfo = Db_conn_info_.parse_("gplx_key=tdb;url=C:\\dir\\xmpl.tdb;format=dsv;");
tst_Parse(connectInfo, Io_url_.new_any_("C:\\dir\\xmpl.tdb"), "dsv");
}
@Test public void DefaultFormat() {
- Db_url connectInfo = Db_url_.parse_("gplx_key=tdb;url=C:\\dir\\xmpl.tdb"); // dsv Format inferred
+ Db_conn_info connectInfo = Db_conn_info_.parse_("gplx_key=tdb;url=C:\\dir\\xmpl.tdb"); // dsv Format inferred
tst_Parse(connectInfo, Io_url_.new_any_("C:\\dir\\xmpl.tdb"), "dsv");
}
- void tst_Parse(Db_url connectInfo, Io_url url, String format) {
- Tfds.Eq(((Tdb_url)connectInfo).Url(), url);
+ void tst_Parse(Db_conn_info connectInfo, Io_url url, String format) {
+ Tfds.Eq(((Tdb_conn_info)connectInfo).Url(), url);
}
}
diff --git a/140_dbs/src/gplx/dbs/engines/tdbs/TdbDatabase.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbDatabase.java
index 65fd0f33d..ec431470c 100644
--- a/140_dbs/src/gplx/dbs/engines/tdbs/TdbDatabase.java
+++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbDatabase.java
@@ -43,5 +43,5 @@ public class TdbDatabase {
}
int FileId_next = TdbFile.MainFileId + 1;
int TableId_next = 1;
-// public static Io_url UrlOf(Db_url url) {return Io_url_.new_any_(url.ServerName());}
+// public static Io_url UrlOf(Db_conn_info url) {return Io_url_.new_any_(url.ServerName());}
}
diff --git a/140_dbs/src/gplx/dbs/engines/tdbs/TdbEngine.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbEngine.java
index 1219245a6..bd16f0dda 100644
--- a/140_dbs/src/gplx/dbs/engines/tdbs/TdbEngine.java
+++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbEngine.java
@@ -18,20 +18,22 @@ along with this program. If not, see .
package gplx.dbs.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*;
import gplx.dbs.qrys.*; import gplx.dbs.sqls.*;
public class TdbEngine implements Db_engine {
- public String Tid() {return Tdb_url.Tid_const;}
- public Db_url Url() {return url;} private Db_url url;
+ public String Tid() {return Tdb_conn_info.Tid_const;}
+ public Db_conn_info Conn_info() {return conn_info;} private Db_conn_info conn_info;
public TdbDatabase Db() {return db;} TdbDatabase db;
public void Conn_open() {
- Tdb_url tdb_url = (Tdb_url)url;
+ Tdb_conn_info tdb_url = (Tdb_conn_info)conn_info;
String url_str = tdb_url.Server();
db = loadMgr.LoadTbls(Io_url_.new_any_(url_str));
}
public void Conn_term() {}
- public void Txn_bgn() {}
- public void Txn_end() {}
- public Db_engine New_clone(Db_url url) {
+ public void Txn_bgn(String name) {}
+ public void Txn_end() {}
+ public void Txn_cxl() {}
+ public void Txn_sav() {}
+ public Db_engine New_clone(Db_conn_info conn_info) {
TdbEngine rv = new TdbEngine();
- rv.CtorTdbEngine(url);
+ rv.CtorTdbEngine(conn_info);
rv.Conn_open();
return rv;
}
@@ -41,7 +43,8 @@ public class TdbEngine implements Db_engine {
}
public Db_stmt New_stmt_prep(Db_qry qry) {return new Db_stmt_sql().Parse(qry, Sql_qry_wtr_.I.Xto_str(qry, true));}
public Object New_stmt_prep_as_obj(String sql) {throw Err_.not_implemented_();}
- public Db_rdr New_rdr_by_obj(Object o, String sql) {return Db_rdr_.Null;}
+ public Db_rdr New_rdr__rls_manual(Object rdr_obj, String sql) {return Db_rdr_.Empty;}
+ public Db_rdr New_rdr__rls_auto(Db_stmt stmt, Object rdr_obj, String sql) {return Db_rdr_.Empty;}
public DataRdr New_rdr(java.sql.ResultSet rdr, String sql) {return DataRdr_.Null;}
public TdbTable FetchTbl(String name) {
TdbTable tbl = db.Tables().FetchOrFail(name);
@@ -54,16 +57,17 @@ public class TdbEngine implements Db_engine {
public void FlushTbl(TdbTable tbl) {
saveMgr.SaveFile(db, tbl.File());
}
- 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_();}
- public void Exec_env_db_attach(String alias, Io_url db_url) {}
- public void Exec_env_db_detach(String alias) {}
+ public void Ddl_create_tbl(Db_meta_tbl meta) {throw Err_.not_implemented_();}
+ public void Ddl_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {throw Err_.not_implemented_();}
+ public void Ddl_append_fld(String tbl, Db_meta_fld fld) {throw Err_.not_implemented_();}
+ public void Ddl_delete_tbl(String tbl) {}
+ public void Env_db_attach(String alias, Io_url db_url) {}
+ public void Env_db_detach(String alias) {}
HashAdp wkrs = HashAdp_.new_(); TdbDbLoadMgr loadMgr = TdbDbLoadMgr.new_(); TdbDbSaveMgr saveMgr = TdbDbSaveMgr.new_();
public static final TdbEngine _ = new TdbEngine();
- void CtorTdbEngine(Db_url url) {
- this.url = url;
+ void CtorTdbEngine(Db_conn_info conn_info) {
+ this.conn_info = conn_info;
wkrs.Add(Db_qry_.Tid_select, TdbSelectWkr._);
wkrs.Add(Db_qry_.Tid_insert, TdbInsertWkr.new_());
wkrs.Add(Db_qry_.Tid_update, TdbUpdateWkr.new_());
diff --git a/140_dbs/src/gplx/dbs/engines/tdbs/TdbFlush_tst.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbFlush_tst.java
index ce40d35ec..e87797b80 100644
--- a/140_dbs/src/gplx/dbs/engines/tdbs/TdbFlush_tst.java
+++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbFlush_tst.java
@@ -81,7 +81,7 @@ public class TdbFlush_tst {
}
class TdbEngineFxt {
public TdbEngine run_MakeEngine(Io_url url) {
- Db_url connectInfo = Db_url_.tdb_(url);
+ Db_conn_info connectInfo = Db_conn_info_.tdb_(url);
TdbEngine engine = (TdbEngine)TdbEngine._.New_clone(connectInfo);
engine.Conn_open();
return engine;
diff --git a/140_dbs/src/gplx/dbs/engines/tdbs/Tdb_url.java b/140_dbs/src/gplx/dbs/engines/tdbs/Tdb_conn_info.java
similarity index 76%
rename from 140_dbs/src/gplx/dbs/engines/tdbs/Tdb_url.java
rename to 140_dbs/src/gplx/dbs/engines/tdbs/Tdb_conn_info.java
index 3e5b61187..4736ae7a8 100644
--- a/140_dbs/src/gplx/dbs/engines/tdbs/Tdb_url.java
+++ b/140_dbs/src/gplx/dbs/engines/tdbs/Tdb_conn_info.java
@@ -16,22 +16,22 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.dbs.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*;
-public class Tdb_url extends Db_url__base {
+public class Tdb_conn_info extends Db_conn_info__base {
public Io_url Url() {return url;} Io_url url;
@Override public String Tid() {return Tid_const;} public static final String Tid_const = "tdb";
- public static Db_url new_(Io_url url) {
- return Db_url_.parse_(Bld_raw
+ public static Db_conn_info new_(Io_url url) {
+ return Db_conn_info_.parse_(Bld_raw
( "gplx_key", Tid_const
, "url", url.Raw()
));
- } Tdb_url() {}
- @Override public Db_url New_self(String raw, GfoMsg m) {
- Tdb_url rv = new Tdb_url();
+ } Tdb_conn_info() {}
+ @Override public Db_conn_info New_self(String raw, GfoMsg m) {
+ Tdb_conn_info rv = new Tdb_conn_info();
String urlStr = m.ReadStr("url");
Io_url url = Io_url_.new_any_(urlStr);
rv.Ctor(urlStr, url.NameOnly(), raw, BldApi(m));
rv.url = url;
return rv;
}
- public static final Tdb_url _ = new Tdb_url();
+ public static final Tdb_conn_info _ = new Tdb_conn_info();
}
diff --git a/140_dbs/src/gplx/dbs/qrys/Db_stmt_cmd.java b/140_dbs/src/gplx/dbs/qrys/Db_stmt_cmd.java
index 0afc4c9b9..eedeb36f9 100644
--- a/140_dbs/src/gplx/dbs/qrys/Db_stmt_cmd.java
+++ b/140_dbs/src/gplx/dbs/qrys/Db_stmt_cmd.java
@@ -114,7 +114,7 @@ public class Db_stmt_cmd implements Db_stmt {
catch (Exception e) {
this.Rls();
Reset_stmt();
- throw Err_.err_(e, "db_stmt.insert: sql={0} err={1}", sql, Err_.Message_gplx_brief(e));
+ throw Err_.err_(e, "db_stmt.insert: url={0} sql={1} err={2}", engine.Conn_info(), sql, Err_.Message_gplx_brief(e));
}
}
public int Exec_update() {
@@ -135,9 +135,12 @@ public class Db_stmt_cmd implements Db_stmt {
}
public DataRdr Exec_select() {
try {DataRdr rv = engine.New_rdr(stmt.executeQuery(), sql); return rv;} catch (Exception e) {throw Err_.err_(e, "failed to exec prepared statement: sql={0}", sql);}
- }
- public Db_rdr Exec_select_as_rdr() {
- try {return engine.New_rdr_by_obj(stmt.executeQuery(), sql);} catch (Exception e) {throw Err_.err_(e, "select failed: sql={0}", sql);}
+ }
+ public Db_rdr Exec_select__rls_auto() {
+ try {return engine.New_rdr__rls_auto(this, stmt.executeQuery(), sql);} catch (Exception e) {throw Err_.err_(e, "select failed: sql={0}", sql);}
+ }
+ public Db_rdr Exec_select__rls_manual() {
+ try {return engine.New_rdr__rls_manual(stmt.executeQuery(), sql);} catch (Exception e) {throw Err_.err_(e, "select failed: sql={0}", sql);}
}
public Object Exec_select_val() {
try {Object rv = Db_qry__select_cmd.Rdr_to_val(engine.New_rdr(stmt.executeQuery(), sql)); return rv;} catch (Exception e) {throw Err_.err_(e, "failed to exec prepared statement: sql={0}", sql);}
@@ -153,6 +156,7 @@ public class Db_stmt_cmd implements Db_stmt {
try {
if (stmt.getConnection().isClosed()) return; // do not close stmt if connection is already closed; throws null error; DATE:2015-02-11
stmt.close();
+ stmt = null;
}
catch (Exception e) {throw Err_.err_(e, "failed to close command: {0}", sql);}
}
diff --git a/140_dbs/src/gplx/dbs/qrys/Db_stmt_sql.java b/140_dbs/src/gplx/dbs/qrys/Db_stmt_sql.java
index bff727afa..af9bd596d 100644
--- a/140_dbs/src/gplx/dbs/qrys/Db_stmt_sql.java
+++ b/140_dbs/src/gplx/dbs/qrys/Db_stmt_sql.java
@@ -112,7 +112,8 @@ public class Db_stmt_sql implements Db_stmt {// used for formatting SQL statemen
public DataRdr Exec_select() {
try {DataRdr rv = conn.Exec_qry_as_rdr(Db_qry_sql.rdr_(this.Xto_sql())); return rv;} catch (Exception e) {throw Err_.err_(e, "failed to exec prepared statement: sql={0}", sql_orig);}
}
- public Db_rdr Exec_select_as_rdr() {throw Err_.not_implemented_();}
+ public Db_rdr Exec_select__rls_auto() {return Db_rdr_.Empty;}
+ public Db_rdr Exec_select__rls_manual() {return Db_rdr_.Empty;}
public Object Exec_select_val() {
try {Object rv = Db_qry__select_cmd.Rdr_to_val(this.Exec_select()); return rv;} catch (Exception e) {throw Err_.err_(e, "failed to exec prepared statement: sql={0}", sql_orig);}
}
diff --git a/140_dbs/src/gplx/dbs/sqls/Db_sqlbldr__sqlite.java b/140_dbs/src/gplx/dbs/sqls/Db_sqlbldr__sqlite.java
index eb6e210b2..12a157b9e 100644
--- a/140_dbs/src/gplx/dbs/sqls/Db_sqlbldr__sqlite.java
+++ b/140_dbs/src/gplx/dbs/sqls/Db_sqlbldr__sqlite.java
@@ -58,6 +58,9 @@ public class Db_sqlbldr__sqlite implements Db_sqlbldr {
tmp_bfr.Add_byte_semic();
return tmp_bfr.Xto_str_and_clear();
}
+ public String Bld_drop_tbl(String tbl) {
+ return String_.Format("DROP TABLE IF EXISTS {0};", tbl);
+ }
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();
@@ -74,7 +77,7 @@ public class Db_sqlbldr__sqlite implements Db_sqlbldr {
tmp_bfr.Add_byte_space();
}
if (fld.Primary()) tmp_bfr.Add_str_ascii("PRIMARY KEY ");
- if (fld.Autoincrement()) tmp_bfr.Add_str_ascii("AUTOINCREMENT ");
+ if (fld.Autonum()) 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
diff --git a/140_dbs/src/gplx/dbs/utls/Db_in_wkr__base.java b/140_dbs/src/gplx/dbs/utls/Db_in_wkr__base.java
index 73cf150f7..a90d6a57d 100644
--- a/140_dbs/src/gplx/dbs/utls/Db_in_wkr__base.java
+++ b/140_dbs/src/gplx/dbs/utls/Db_in_wkr__base.java
@@ -17,21 +17,25 @@ along with this program. If not, see .
*/
package gplx.dbs.utls; import gplx.*; import gplx.dbs.*;
public abstract class Db_in_wkr__base {
- protected abstract int Interval();
- protected abstract Db_qry Make_qry (Object db_ctx, int bgn, int end);
+ @gplx.Virtual protected int Interval() {return gplx.dbs.engines.sqlite.Sqlite_engine_.Stmt_arg_max - 10;} // -10 for safety's sake
+ protected abstract Db_qry Make_qry (int bgn, int end);
protected abstract void Fill_stmt (Db_stmt stmt, int bgn, int end);
- protected abstract void Read_data (Cancelable cancelable, Object db_ctx, Db_rdr rdr);
- public void Select_in(Cancelable cancelable, Object db_ctx, Db_conn conn, int full_bgn, int full_end) {
- Db_rdr rdr = Db_rdr_.Null; Db_stmt stmt = Db_stmt_.Null;
+ protected abstract void Read_data (Cancelable cancelable, Db_rdr rdr);
+ @gplx.Virtual protected boolean Show_progress() {return false;}
+ public void Select_in(Cancelable cancelable, Db_conn conn, int full_bgn, int full_end) {
int part_len = Interval();
+ Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_.I;
+ boolean show_progress = this.Show_progress();
for (int part_bgn = full_bgn; part_bgn < full_end; part_bgn += part_len) {
int part_end = part_bgn + part_len;
if (part_end > full_end) part_end = full_end;
+ Db_stmt stmt = Db_stmt_.Null; Db_rdr rdr = Db_rdr_.Empty;
try {
- stmt = conn.Stmt_new(Make_qry(db_ctx, part_bgn, part_end));
+ if (show_progress) usr_dlg.Prog_many("", "", "reading: count=~{0}", part_end);
+ stmt = conn.Stmt_new(Make_qry(part_bgn, part_end));
Fill_stmt(stmt, part_bgn, part_end);
- rdr = stmt.Exec_select_as_rdr();
- Read_data(cancelable, db_ctx, rdr);
+ rdr = stmt.Exec_select__rls_manual();
+ Read_data(cancelable, rdr);
}
finally {rdr.Rls(); stmt.Rls();}
}
diff --git a/140_dbs/src/gplx/dbs/utls/Db_sys_id_mgr.java b/140_dbs/src/gplx/dbs/utls/Db_sys_id_mgr.java
deleted file mode 100644
index 8abab286f..000000000
--- a/140_dbs/src/gplx/dbs/utls/Db_sys_id_mgr.java
+++ /dev/null
@@ -1,26 +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 .
-*/
-package gplx.dbs.utls; import gplx.*; import gplx.dbs.*;
-import gplx.core.primitives.*;
-class Db_sys_id_mgr {
- private Db_sys_regy_mgr db_regy;
- public Db_sys_id_mgr(Db_sys_regy_mgr db_regy) {this.db_regy = db_regy;}
- public int Get_next(String key) {return db_regy.Get_val_as_int_or(Grp_key, key, 1);}
- public void Set_next(String key, int v) {db_regy.Set(Grp_key, key, Int_.Xto_str(v));}
- private static final String Grp_key = "gplx.next_id";
-}
diff --git a/140_dbs/src/gplx/dbs/utls/Db_sys_regy_mgr.java b/140_dbs/src/gplx/dbs/utls/Db_sys_regy_mgr.java
deleted file mode 100644
index c281d2c45..000000000
--- a/140_dbs/src/gplx/dbs/utls/Db_sys_regy_mgr.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-XOWA: the XOWA Offline Wiki Application
-Copyright (C) 2012 gnosygnu@gmail.com
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU Affero General Public License as
-published by the Free Software Foundation, either version 3 of the
-License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU Affero General Public License for more details.
-
-You should have received a copy of the GNU Affero General Public License
-along with this program. If not, see .
-*/
-package gplx.dbs.utls; import gplx.*; import gplx.dbs.*;
-class Db_sys_regy_mgr {
- private Db_sys_regy_tbl tbl;
- public Db_sys_regy_mgr(Db_url url, String name, boolean create) {
- tbl = new Db_sys_regy_tbl(url, name);
- if (create) tbl.Create_table();
- }
- public void Set(String grp, String key, String val) {
- if (tbl.Select_val_or(grp, key, null) == null)
- tbl.Insert(grp, key, val);
- else
- tbl.Update(grp, key, val);
- }
- public void Del(String grp, String key) {
- tbl.Delete(grp, key);
- }
- public String Get_val_as_str_or(String grp, String key, String or) {
- return tbl.Select_val_or(grp, key, or);
- }
- public int Get_val_as_int_or(String grp, String key, int or) {
- String rv = tbl.Select_val_or(grp, key, null);
- return rv == null ? or : Int_.parse_or_(rv, or);
- }
-}
-class Db_sys_regy_itm {
- public Db_sys_regy_itm(String grp, String key, String val) {this.grp = grp; this.key = key; this.val = val;}
- public String Grp() {return grp;} private final String grp;
- public String Key() {return key;} private final String key;
- public String Val() {return val;} private final String val;
-}
diff --git a/140_dbs/src/gplx/dbs/utls/Db_sys_regy_mgr_tst.java b/140_dbs/src/gplx/dbs/utls/Db_sys_regy_mgr_tst.java
deleted file mode 100644
index fa0d9f899..000000000
--- a/140_dbs/src/gplx/dbs/utls/Db_sys_regy_mgr_tst.java
+++ /dev/null
@@ -1,54 +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 .
-*/
-package gplx.dbs.utls; import gplx.*; import gplx.dbs.*;
-import org.junit.*;
-public class Db_sys_regy_mgr_tst {
- @Before public void init() {fxt.Init();} private Db_sys_regy_mgr_fxt fxt = new Db_sys_regy_mgr_fxt();
- @Test public void Insert() {
- fxt .Exec_set("grp", "key", "val_0")
- .Test_get("grp", "key", "val_0");
- }
- @Test public void Update() {
- fxt .Exec_set("grp", "key", "val_0")
- .Exec_set("grp", "key", "val_1")
- .Test_get("grp", "key", "val_1");
- }
- @Test public void Delete() {
- fxt .Exec_set("grp", "key_0", "val_0")
- .Exec_set("grp", "key_1", "val_1")
- .Exec_del("grp", "key_1")
- .Test_get("grp", "key_0", "val_0")
- .Test_get("grp", "key_1", null)
- ;
- }
-}
-class Db_sys_regy_mgr_fxt {
- private Db_sys_regy_mgr sys_regy_mgr;
- public void Init() {
- if (sys_regy_mgr == null) {
- Db_conn_pool.I.Get_or_new__mem("test_db");
- sys_regy_mgr = new Db_sys_regy_mgr(Db_url_.mem_("test_db"), "test_regy", true);
- }
- }
- public Db_sys_regy_mgr_fxt Exec_set(String grp, String key, String val) {sys_regy_mgr.Set(grp, key, val); return this;}
- public Db_sys_regy_mgr_fxt Exec_del(String grp, String key) {sys_regy_mgr.Del(grp, key); return this;}
- public Db_sys_regy_mgr_fxt Test_get(String grp, String key, String expd_val) {
- Tfds.Eq(expd_val, sys_regy_mgr.Get_val_as_str_or(grp, key, null));
- return this;
- }
-}
diff --git a/140_dbs/src/gplx/dbs/utls/Db_sys_regy_tbl.java b/140_dbs/src/gplx/dbs/utls/Db_sys_regy_tbl.java
deleted file mode 100644
index bca97e0b0..000000000
--- a/140_dbs/src/gplx/dbs/utls/Db_sys_regy_tbl.java
+++ /dev/null
@@ -1,60 +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 .
-*/
-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) {
- this.tbl_name = tbl_name;
- this.meta = Db_sys_regy_tbl.new_meta(tbl_name);
- this.conn = Db_conn_pool.I.Get_or_new(url);
- }
- public void Create_table() {conn.Exec_create_tbl_and_idx(meta);}
- public void Insert(String grp, String key, String val) {
- Db_stmt stmt = conn.Stmt_insert(tbl_name, Flds.To_str_ary());
- stmt.Clear().Val_str(grp).Val_str(key).Val_str(val).Exec_insert();
- }
- public void Update(String grp, String key, String val) {
- Db_stmt stmt = conn.Stmt_update(tbl_name, String_.Ary(Fld_regy_grp, Fld_regy_key), Fld_regy_val);
- stmt.Clear().Val_str(val).Crt_str(Fld_regy_grp, grp).Crt_str(Fld_regy_key, key).Exec_update();
- }
- public void Delete(String grp, String key) {
- Db_stmt stmt = conn.Stmt_delete(tbl_name, Fld_regy_grp, Fld_regy_key);
- stmt.Clear().Crt_str(Fld_regy_grp, grp).Crt_str(Fld_regy_key, key).Exec_delete();
- }
- public String Select_val_or(String grp, String key, String or) {
- Db_stmt stmt = conn.Stmt_select(tbl_name, Flds.To_str_ary(), Fld_regy_grp, Fld_regy_key);
- Db_rdr rdr = Db_rdr_.Null;
- try {
- rdr = stmt.Clear().Crt_str(Fld_regy_grp, grp).Crt_str(Fld_regy_key, key).Exec_select_as_rdr();
- return rdr.Move_next() ? rdr.Read_str(Fld_regy_val) : or;
- } finally {rdr.Rls();}
- }
-}
diff --git a/140_dbs/src/gplx/dbs/utls/PoolIds_tst.java b/140_dbs/src/gplx/dbs/utls/PoolIds_tst.java
index a1e7565f6..cda26cb12 100644
--- a/140_dbs/src/gplx/dbs/utls/PoolIds_tst.java
+++ b/140_dbs/src/gplx/dbs/utls/PoolIds_tst.java
@@ -19,7 +19,7 @@ package gplx.dbs.utls; import gplx.*; import gplx.dbs.*;
import org.junit.*;
public class PoolIds_tst {
@Before public void setup() {
- conn = Db_conn_pool.I.Get_or_new(Db_url_.Test);
+ conn = Db_conn_pool.I.Get_or_new(Db_conn_info_.Test);
Db_qry_fxt.DeleteAll(conn, PoolIds.Tbl_Name);
mgr = PoolIds._;
}
diff --git a/140_dbs/src/gplx/stores/DbMaprMgr_tst.java b/140_dbs/src/gplx/stores/DbMaprMgr_tst.java
index c987bb6de..746cdde81 100644
--- a/140_dbs/src/gplx/stores/DbMaprMgr_tst.java
+++ b/140_dbs/src/gplx/stores/DbMaprMgr_tst.java
@@ -17,7 +17,7 @@ along with this program. If not, see .
*/
package gplx.stores; import gplx.*;
import org.junit.*;
-import gplx.dbs.*; /*Db_url*/
+import gplx.dbs.*; /*Db_conn_info*/
public class DbMaprMgr_tst {
@Before public void setup() {
mgr = DbMaprMgr.new_().RootIndexFlds_(DbMaprArg.new_("id", "disc_id"))
@@ -37,9 +37,9 @@ public class DbMaprMgr_tst {
. Flds_add(MockStream.id_idk, "stream_id").Flds_add(MockStream.name_idk, "stream_name")
. ConstantFlds_add("stream_type", 1)
)));
- wtr = DbMaprWtr.new_by_url_(Db_url_.Test);
+ wtr = DbMaprWtr.new_by_url_(Db_conn_info_.Test);
wtr.EnvVars().Add(DbMaprWtr.Key_Mgr, mgr);
- conn = Db_conn_pool.I.Get_or_new(Db_url_.Test);
+ conn = Db_conn_pool.I.Get_or_new(Db_conn_info_.Test);
Db_qry_fxt.DeleteAll(conn, "mock_discs", "mock_titles", "mock_chapters", "mock_streams");
} DbMaprMgr mgr; DbMaprWtr wtr; Db_conn conn; MockDisc disc; MockTitle title; MockChapter chapter; MockStream audio, subtitle; SrlMgr rdr;
@Test public void PurgeObjTree() {
@@ -133,7 +133,7 @@ public class DbMaprMgr_tst {
Tfds.Eq("subtitle1", ((MockStream)t.Subtitles().FetchAt(0)).Name());
}
DbMaprRdr rdr_() {
- DbMaprRdr rv = DbMaprRdr.new_(Db_url_.Test, Db_crt_.eq_("disc_id", 1));
+ DbMaprRdr rv = DbMaprRdr.new_(Db_conn_info_.Test, Db_crt_.eq_("disc_id", 1));
rv.EnvVars().Add(DbMaprWtr.Key_Mgr, mgr);
return rv;
}
diff --git a/140_dbs/src/gplx/stores/DbMaprRdr.java b/140_dbs/src/gplx/stores/DbMaprRdr.java
index 84e0621c0..53a7b6013 100644
--- a/140_dbs/src/gplx/stores/DbMaprRdr.java
+++ b/140_dbs/src/gplx/stores/DbMaprRdr.java
@@ -114,7 +114,7 @@ public class DbMaprRdr extends DataRdr_base implements SrlMgr {
HashAdp tables = HashAdp_.new_();
Db_conn conn; Criteria rootCrt;
DbMaprMgr mgr; ListAdp rowStack = ListAdp_.new_();
- public static DbMaprRdr new_(Db_url dbInfo, Criteria rootCrt) {
+ public static DbMaprRdr new_(Db_conn_info dbInfo, Criteria rootCrt) {
DbMaprRdr rv = new DbMaprRdr();
rv.conn = Db_conn_pool.I.Get_or_new(dbInfo); rv.rootCrt = rootCrt;
return rv;
diff --git a/140_dbs/src/gplx/stores/DbMaprWtr.java b/140_dbs/src/gplx/stores/DbMaprWtr.java
index 2899f59f8..5e1ada2b1 100644
--- a/140_dbs/src/gplx/stores/DbMaprWtr.java
+++ b/140_dbs/src/gplx/stores/DbMaprWtr.java
@@ -84,7 +84,7 @@ public class DbMaprWtr extends DataWtr_base implements DataWtr {
public String XtoStr() {return "";}
@Override public SrlMgr SrlMgr_new(Object o) {return new DbMaprWtr();}
DbMaprMgr mgr; Db_conn conn; String curTableName; Db_qry_insert insertCmd;
- public static DbMaprWtr new_by_url_(Db_url url) {
+ public static DbMaprWtr new_by_url_(Db_conn_info url) {
DbMaprWtr rv = new DbMaprWtr();
rv.conn = Db_conn_pool.I.Get_or_new(url);
return rv;
diff --git a/140_dbs/tst/gplx/dbs/Db_conn_fxt.java b/140_dbs/tst/gplx/dbs/Db_conn_fxt.java
index f9273c491..82b212817 100644
--- a/140_dbs/tst/gplx/dbs/Db_conn_fxt.java
+++ b/140_dbs/tst/gplx/dbs/Db_conn_fxt.java
@@ -44,11 +44,11 @@ public class Db_conn_fxt implements RlsAble {
Tfds.Eq_ary(actlValAry, expdValAry);
return record;
}
- public void Rls() {conn.Conn_term();}
+ public void Rls() {conn.Rls_conn();}
- public static Db_conn Mysql() {return Db_conn_pool.I.Get_or_new(Mysql_url.new_("127.0.0.1", "unit_tests", "gplx_user", "gplx_password"));}
- public static Db_conn Tdb(String fileName) {return Db_conn_pool.I.Get_or_new(Db_url_.tdb_(Tfds.RscDir.GenSubDir_nest("140_dbs", "tdbs").GenSubFil(fileName)));}
- public static Db_conn Postgres() {return Db_conn_pool.I.Get_or_new(Postgres_url.new_("127.0.0.1", "unit_tests", "gplx_user", "gplx_password"));}
- public static Db_conn Sqlite() {return Db_conn_pool.I.Get_or_new(Sqlite_url.load_(Tfds.RscDir.GenSubFil_nest("140_dbs", "sqlite", "unit_tests.db")));}
+ public static Db_conn Mysql() {return Db_conn_pool.I.Get_or_new(Mysql_conn_info.new_("127.0.0.1", "unit_tests", "gplx_user", "gplx_password"));}
+ public static Db_conn Tdb(String fileName) {return Db_conn_pool.I.Get_or_new(Db_conn_info_.tdb_(Tfds.RscDir.GenSubDir_nest("140_dbs", "tdbs").GenSubFil(fileName)));}
+ public static Db_conn Postgres() {return Db_conn_pool.I.Get_or_new(Postgres_conn_info.new_("127.0.0.1", "unit_tests", "gplx_user", "gplx_password"));}
+ public static Db_conn Sqlite() {return Db_conn_pool.I.Get_or_new(Sqlite_conn_info.load_(Tfds.RscDir.GenSubFil_nest("140_dbs", "sqlite", "unit_tests.db")));}
public static final boolean SkipPostgres = Tfds.SkipDb || true;
}
\ No newline at end of file
diff --git a/140_dbs/tst/gplx/dbs/engines/db_DataTypes_tst.java b/140_dbs/tst/gplx/dbs/engines/db_DataTypes_tst.java
index ff5917e08..1a5d5f34e 100644
--- a/140_dbs/tst/gplx/dbs/engines/db_DataTypes_tst.java
+++ b/140_dbs/tst/gplx/dbs/engines/db_DataTypes_tst.java
@@ -51,12 +51,12 @@ INSERT INTO dbs_multiple_data_types VALUES (1, 'John Doe', B'1', '3/30/2006 10:2
class DataTypes_base_fxt {
public Db_conn Conn() {return conn;} Db_conn conn;
public DataTypes_base_fxt() {}
- public void Rls() {conn.Conn_term();}
+ public void Rls() {conn.Rls_conn();}
public String Select_FloatStr() {return select_FloatStr;} public DataTypes_base_fxt Select_FloatStr_(String v) {select_FloatStr = v; return this;} private String select_FloatStr;
public void RunAll(Db_conn conn) {
this.conn = conn;
this.Select_hook(select_FloatStr);
- conn.Conn_term();
+ conn.Rls_conn();
}
public void Select_hook(String floatStr) {
DataRdr rdr = Db_qry_.select_tbl_("dbs_multiple_data_types").Exec_qry_as_rdr(conn);
diff --git a/140_dbs/tst/gplx/dbs/groupBys/GroupBys_base_tst.java b/140_dbs/tst/gplx/dbs/groupBys/GroupBys_base_tst.java
index e02d42d1e..15a61d41c 100644
--- a/140_dbs/tst/gplx/dbs/groupBys/GroupBys_base_tst.java
+++ b/140_dbs/tst/gplx/dbs/groupBys/GroupBys_base_tst.java
@@ -25,7 +25,7 @@ public abstract class GroupBys_base_tst {
Db_qry_.delete_tbl_("dbs_group_bys").Exec_qry(conn);
}
@After public void teardown() {
- conn.Conn_term();
+ conn.Rls_conn();
}
protected void GroupBy_1fld_hook() {
conn.Exec_qry(Db_qry_.insert_("dbs_group_bys").Arg_("key1", "a").Arg_("val_int", 1));
diff --git a/140_dbs/tst/gplx/dbs/insertIntos/InsertIntos_base_tst.java b/140_dbs/tst/gplx/dbs/insertIntos/InsertIntos_base_tst.java
index 668e8283c..ff490f313 100644
--- a/140_dbs/tst/gplx/dbs/insertIntos/InsertIntos_base_tst.java
+++ b/140_dbs/tst/gplx/dbs/insertIntos/InsertIntos_base_tst.java
@@ -26,7 +26,7 @@ public abstract class InsertIntos_base_tst {
conn.Exec_qry(Db_qry_delete.new_("dbs_insert_intos"));
}
@After public void teardown() {
- conn.Conn_term();
+ conn.Rls_conn();
}
protected void Select_hook() {
conn.Exec_qry(Db_qry_.insert_("dbs_group_bys").Arg_("key1", "a").Arg_("val_int", 1));
diff --git a/140_dbs/tst/gplx/dbs/joins/Joins_base_tst.java b/140_dbs/tst/gplx/dbs/joins/Joins_base_tst.java
index 5d70d56e4..865720827 100644
--- a/140_dbs/tst/gplx/dbs/joins/Joins_base_tst.java
+++ b/140_dbs/tst/gplx/dbs/joins/Joins_base_tst.java
@@ -25,7 +25,7 @@ public abstract class Joins_base_tst {
Db_qry_delete.new_("dbs_join1").Exec_qry(conn);
}
@After public void teardown() {
- conn.Conn_term();
+ conn.Rls_conn();
}
protected void InnerJoin_hook() {
conn.Exec_qry(new Db_qry_insert("dbs_crud_ops").Arg_("id", 0).Arg_("name", "me"));
diff --git a/140_dbs/tst/gplx/dbs/orderBys/OrderBys_base_tst.java b/140_dbs/tst/gplx/dbs/orderBys/OrderBys_base_tst.java
index 2ef916099..e7848c2f7 100644
--- a/140_dbs/tst/gplx/dbs/orderBys/OrderBys_base_tst.java
+++ b/140_dbs/tst/gplx/dbs/orderBys/OrderBys_base_tst.java
@@ -23,7 +23,7 @@ public abstract class OrderBys_base_tst {
fx.Conn_(conn);
Db_qry_delete.new_("dbs_crud_ops").Exec_qry(conn);
} protected Db_conn_fxt fx = new Db_conn_fxt();
- @After public void teardown() {conn.Conn_term();}
+ @After public void teardown() {conn.Rls_conn();}
protected abstract Db_conn provider_(); protected Db_conn conn;
protected void Basic_hook() {
fx.tst_ExecDml(1, new Db_qry_insert("dbs_crud_ops").Arg_("id", 1).Arg_("name", "you"));
diff --git a/140_dbs/xtn/gplx/dbs/SqliteDbMain.java b/140_dbs/xtn/gplx/dbs/SqliteDbMain.java
index a29dfeb14..4aff926e9 100644
--- a/140_dbs/xtn/gplx/dbs/SqliteDbMain.java
+++ b/140_dbs/xtn/gplx/dbs/SqliteDbMain.java
@@ -81,7 +81,7 @@ public class SqliteDbMain {
}
long time_elapsed = (Env_.TickCount() - time_bgn);
// provider.Txn_mgr().Txn_end();
- provider.Conn_term();
+ provider.Rls_conn();
Tfds.Write(time_elapsed, number / time_elapsed);
// 250; 260
Tfds.Write("");
diff --git a/150_gfui/src_700_env/gplx/gfui/Swt_kit.java b/150_gfui/src_700_env/gplx/gfui/Swt_kit.java
index 1adacf6f0..9a0030669 100644
--- a/150_gfui/src_700_env/gplx/gfui/Swt_kit.java
+++ b/150_gfui/src_700_env/gplx/gfui/Swt_kit.java
@@ -194,7 +194,7 @@ public class Swt_kit implements Gfui_kit {
return rv;
}
catch (Exception e) {
- Gfo_usr_dlg_._.Warn_many("", "", "error while calculating font height; err=~{0}", Err_.Message_gplx_brief(e));
+ Gfo_usr_dlg_.I.Warn_many("", "", "error while calculating font height; err=~{0}", Err_.Message_gplx_brief(e));
return 8;
}
}
diff --git a/400_xowa/src/gplx/core/enums/Gfo_enum_grp.java b/400_xowa/src/gplx/core/enums/Gfo_enum_grp.java
index 5215ee5fa..dd23365ca 100644
--- a/400_xowa/src/gplx/core/enums/Gfo_enum_grp.java
+++ b/400_xowa/src/gplx/core/enums/Gfo_enum_grp.java
@@ -18,10 +18,10 @@ along with this program. If not, see .
package gplx.core.enums; import gplx.*; import gplx.core.*;
class Gfo_enum_grp {
// private OrderedHash itms = OrderedHash_.new_();
- public Gfo_enum_grp(UuidAdp uid, String key, int id, String name, int sort, String xtn) {
+ public Gfo_enum_grp(Guid_adp uid, String key, int id, String name, int sort, String xtn) {
this.uid = uid; this.key = key; this.id = id; this.name = name; this.sort = sort; this.xtn = xtn;
}
- public UuidAdp Uid() {return uid;} private UuidAdp uid;
+ public Guid_adp Uid() {return uid;} private Guid_adp uid;
public String Key() {return key;} private String key;
public int Id() {return id;} private int id;
public String Name() {return name;} private String name;
@@ -29,10 +29,10 @@ class Gfo_enum_grp {
public String Xtn() {return xtn;} private String xtn;
}
class Gfo_enum_itm {
- public Gfo_enum_itm(UuidAdp uid, String key, int id, String name, int sort, String xtn) {
+ public Gfo_enum_itm(Guid_adp uid, String key, int id, String name, int sort, String xtn) {
this.uid = uid; this.key = key; this.id = id; this.name = name; this.sort = sort; this.xtn = xtn;
}
- public UuidAdp Uid() {return uid;} private UuidAdp uid;
+ public Guid_adp Uid() {return uid;} private Guid_adp uid;
public String Key() {return key;} private String key;
public int Id() {return id;} private int id;
public String Name() {return name;} private String name;
diff --git a/400_xowa/src/gplx/dbs/Db_attach_cmd.java b/400_xowa/src/gplx/dbs/Db_attach_cmd.java
new file mode 100644
index 000000000..a1159c32f
--- /dev/null
+++ b/400_xowa/src/gplx/dbs/Db_attach_cmd.java
@@ -0,0 +1,54 @@
+/*
+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 .
+*/
+package gplx.dbs; import gplx.*;
+import gplx.dbs.engines.sqlite.*;
+public class Db_attach_cmd {
+ private final boolean diff_db;
+ private final Db_conn conn; private final String attach_name; private final Io_url attach_url;
+ private final ListAdp sql_list = ListAdp_.new_();
+ Db_attach_cmd(Db_conn conn, String attach_name, Io_url attach_url) {
+ this.conn = conn; this.attach_name = attach_name; this.attach_url = attach_url;
+ Sqlite_conn_info conn_info = (Sqlite_conn_info)conn.Conn_info();
+ this.diff_db = !String_.Eq(conn_info.Url().Raw(), attach_url.Raw());
+ }
+ public Db_attach_cmd Add_fmt(String msg, String sql_fmt, Object... sql_args) {
+ String sql = String_.Format(sql_fmt, sql_args);
+ sql = String_.Replace(sql, "", diff_db ? attach_name + "." : ""); // replace with either "attach_db." or "";
+ sql_list.Add(new Db_exec_sql_by_attach_itm(msg, sql));
+ return this;
+ }
+ public void Exec() {
+ Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_.I;
+ if (diff_db) conn.Env_db_attach(attach_name, attach_url);
+ conn.Txn_bgn(attach_name); // NOTE: BEGIN TRAN must occur after ATTACH else sqlite will throw error
+ int len = sql_list.Count();
+ for (int i = 0; i < len; ++i) {
+ Db_exec_sql_by_attach_itm itm = (Db_exec_sql_by_attach_itm)sql_list.FetchAt(i);
+ usr_dlg.Plog_many("", "", itm.Msg());
+ conn.Exec_sql(itm.Sql());
+ }
+ conn.Txn_end();
+ if (diff_db) conn.Env_db_detach(attach_name);
+ }
+ public static Db_attach_cmd new_(Db_conn conn, String attach_name, Io_url attach_url) {return new Db_attach_cmd(conn, attach_name, attach_url);}
+}
+class Db_exec_sql_by_attach_itm {
+ public Db_exec_sql_by_attach_itm(String msg, String sql) {this.msg = msg; this.sql = sql;}
+ public String Msg() {return msg;} private final String msg;
+ public String Sql() {return sql;} private final String sql;
+}
diff --git a/400_xowa/src/gplx/dbs/Db_attach_rdr.java b/400_xowa/src/gplx/dbs/Db_attach_rdr.java
new file mode 100644
index 000000000..6136686ec
--- /dev/null
+++ b/400_xowa/src/gplx/dbs/Db_attach_rdr.java
@@ -0,0 +1,35 @@
+/*
+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 .
+*/
+package gplx.dbs; import gplx.*;
+import gplx.dbs.engines.sqlite.*;
+public class Db_attach_rdr {
+ private final boolean diff_db;
+ private final Db_conn conn; private final String attach_name; private final Io_url attach_url;
+ public Db_attach_rdr(Db_conn conn, String attach_name, Io_url attach_url) {
+ this.conn = conn; this.attach_name = attach_name; this.attach_url = attach_url;
+ Sqlite_conn_info conn_info = (Sqlite_conn_info)conn.Conn_info();
+ this.diff_db = !String_.Eq(conn_info.Url().Raw(), attach_url.Raw());
+ }
+ public Db_rdr Exec_as_rdr(String sql) {
+ if (diff_db) conn.Env_db_attach(attach_name, attach_url);
+ return conn.Exec_sql_as_rdr2(sql);
+ }
+ public void Rls() {
+ if (diff_db) conn.Env_db_detach(attach_name);
+ }
+}
diff --git a/400_xowa/src/gplx/dbs/cfgs/Db_cfg_grp.java b/400_xowa/src/gplx/dbs/cfgs/Db_cfg_grp.java
deleted file mode 100644
index b77f090fe..000000000
--- a/400_xowa/src/gplx/dbs/cfgs/Db_cfg_grp.java
+++ /dev/null
@@ -1,63 +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 .
-*/
-package gplx.dbs.cfgs; import gplx.*; import gplx.dbs.*;
-public class Db_cfg_grp {
- private OrderedHash itms = OrderedHash_.new_();
- public Db_cfg_grp(String grp) {this.grp = grp;}
- public String Grp() {return grp;} private String grp;
- public void Insert(String key, String val) {
- if (itms.Has(key)) throw Err_.new_fmt_("cfg_grp.Insert failed; key={0}", key);
- Fsm_cfg_itm itm = new Fsm_cfg_itm(grp, key, val);
- itms.Add(key, itm);
- }
- public void Update(String key, String val) {
- Fsm_cfg_itm itm = (Fsm_cfg_itm)itms.Fetch(key);
- if (itm == null) throw Err_.new_fmt_("cfg_grp.Update failed; key={0}", key);
- itm.Val_(val);
- }
- public void Upsert(String key, String val) {
- Fsm_cfg_itm itm = (Fsm_cfg_itm)itms.Fetch(key);
- if (itm == null) {
- itm = new Fsm_cfg_itm(grp, key, val);
- itms.Add(key, itm);
- }
- else
- itm.Val_(val);
- }
- public boolean Get_yn_or_y(String key) {return Get_yn_or(key, Bool_.Y);}
- public boolean Get_yn_or_n(String key) {return Get_yn_or(key, Bool_.N);}
- public boolean Get_yn_or(String key, boolean or) {
- String rv = Get_str_or(key, null);
- return rv == null ? or : Yn.parse_(rv);
- }
- public int Get_int_or(String key, int or) {
- String rv = Get_str_or(key, null);
- return rv == null ? or : Int_.parse_(rv);
- }
- public String Get_str_or(String key, String or) {
- Fsm_cfg_itm itm = (Fsm_cfg_itm)itms.Fetch(key);
- return itm == null ? or : itm.Val();
- }
- public static final Db_cfg_grp Null = new Db_cfg_grp(); Db_cfg_grp() {}
-}
-class Fsm_cfg_itm {
- public Fsm_cfg_itm(String grp, String key, String val) {this.grp = grp; this.key = key; this.val = val;}
- public String Grp() {return grp;} private String grp;
- public String Key() {return key;} private String key;
- public String Val() {return val;} public Fsm_cfg_itm Val_(String v) {val = v; return this;} private String val;
-}
diff --git a/400_xowa/src/gplx/dbs/cfgs/Db_cfg_hash.java b/400_xowa/src/gplx/dbs/cfgs/Db_cfg_hash.java
new file mode 100644
index 000000000..30fa7bdca
--- /dev/null
+++ b/400_xowa/src/gplx/dbs/cfgs/Db_cfg_hash.java
@@ -0,0 +1,34 @@
+/*
+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 .
+*/
+package gplx.dbs.cfgs; import gplx.*; import gplx.dbs.*;
+public class Db_cfg_hash {
+ private final String grp; private final OrderedHash hash = OrderedHash_.new_();
+ public Db_cfg_hash(String grp) {this.grp = grp;}
+ public int Len() {return hash.Count();}
+ public Db_cfg_itm Get_at(int i) {return (Db_cfg_itm)hash.FetchAt(i);}
+ public Db_cfg_itm Get(String key) {
+ Db_cfg_itm rv = (Db_cfg_itm)hash.Fetch(key);
+ return rv == null ? Db_cfg_itm.Empty : rv;
+ }
+ public void Set(String key, String val) {hash.Del(key); Add(key, val);}
+ public void Add(String key, String val) {
+ if (hash.Has(key)) throw Err_.new_fmt_("itm exists; grp={0} key={01}", grp, key);
+ Db_cfg_itm itm = new Db_cfg_itm(grp, key, val);
+ hash.Add(key, itm);
+ }
+}
diff --git a/400_xowa/src/gplx/dbs/cfgs/Db_cfg_itm.java b/400_xowa/src/gplx/dbs/cfgs/Db_cfg_itm.java
new file mode 100644
index 000000000..383690090
--- /dev/null
+++ b/400_xowa/src/gplx/dbs/cfgs/Db_cfg_itm.java
@@ -0,0 +1,59 @@
+/*
+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 .
+*/
+package gplx.dbs.cfgs; import gplx.*; import gplx.dbs.*;
+public class Db_cfg_itm {
+ public Db_cfg_itm(String grp, String key, String val) {this.grp = grp; this.key = key; this.val = val;}
+ public String Grp() {return grp;} private final String grp;
+ public String Key() {return key;} private final String key;
+ public String Val() {return val;} public Db_cfg_itm Val_(String v) {val = v; return this;} private String val;
+ public String To_str_or(String or) {return val == null ? or : val;}
+ public byte[] To_bry_or(byte[] or) {try {return val == null ? or : Bry_.new_utf8_(val) ;} catch (Exception e) {throw err_parse(e, Bry_.Cls_val_name);}}
+ public int To_int_or(int or) {try {return val == null ? or : Int_.parse_or_(val, or) ;} catch (Exception e) {throw err_parse(e, Int_.Cls_val_name);}}
+ public long To_long_or(long or) {try {return val == null ? or : Long_.parse_or_(val, or) ;} catch (Exception e) {throw err_parse(e, Long_.Cls_val_name);}}
+ public byte To_byte_or(byte or) {try {return val == null ? or : Byte_.parse_or_(val, or) ;} catch (Exception e) {throw err_parse(e, Byte_.Cls_val_name);}}
+ public boolean To_yn_or_n() {return To_yn_or(Bool_.N);}
+ public boolean To_yn_or(boolean or) {try {return val == null ? or : Yn.parse_by_char_or(val, or);} catch (Exception e) {throw err_parse(e, Bool_.Cls_val_name);}}
+ public DateAdp To_date_or(DateAdp or) {try {return val == null ? or : DateAdp_.parse_gplx(val) ;} catch (Exception e) {throw err_parse(e, DateAdp_.Cls_ref_name);}}
+ public Guid_adp To_guid_or(Guid_adp or) {try {return val == null ? or : Guid_adp_.parse_(val) ;} catch (Exception e) {throw err_parse(e, Guid_adp_.Cls_ref_name);}}
+ public boolean To_bool() {Fail_if_null(); try {return Yn.parse_(val) ;} catch (Exception e) {throw err_parse(e, Bool_.Cls_val_name);}}
+ public byte To_byte() {Fail_if_null(); try {return Byte_.parse_(val) ;} catch (Exception e) {throw err_parse(e, Byte_.Cls_val_name);}}
+ public int To_int() {Fail_if_null(); try {return Int_.parse_(val) ;} catch (Exception e) {throw err_parse(e, Int_.Cls_val_name);}}
+ public String To_str() {Fail_if_null(); return val;}
+ private void Fail_if_null() {if (val == null) throw Err_.new_("cfg.val is empty; grp={0} key={1}", grp, key); }
+ private Err err_parse(Exception e, String type) {return Err_.new_("cfg.val is not parseable; grp={0} key={1} val={2} type={3}", grp, key, val, type);}
+
+ private static final String Grp_none = "";
+ public static Db_cfg_itm new_str (String key, String val) {return new Db_cfg_itm(Grp_none , key, val);}
+ public static Db_cfg_itm new_str (String grp, String key, String val) {return new Db_cfg_itm(grp , key, val);}
+ public static Db_cfg_itm new_bry (String key, byte[] val) {return new Db_cfg_itm(Grp_none , key, String_.new_utf8_(val));}
+ public static Db_cfg_itm new_bry (String grp, String key, byte[] val) {return new Db_cfg_itm(grp , key, String_.new_utf8_(val));}
+ public static Db_cfg_itm new_int (String key, int val) {return new Db_cfg_itm(Grp_none , key, Int_.Xto_str(val));}
+ public static Db_cfg_itm new_int (String grp, String key, int val) {return new Db_cfg_itm(grp , key, Int_.Xto_str(val));}
+ public static Db_cfg_itm new_long (String key, long val) {return new Db_cfg_itm(Grp_none , key, Long_.Xto_str(val));}
+ public static Db_cfg_itm new_long (String grp, String key, long val) {return new Db_cfg_itm(grp , key, Long_.Xto_str(val));}
+ public static Db_cfg_itm new_byte (String key, byte val) {return new Db_cfg_itm(Grp_none , key, Byte_.Xto_str(val));}
+ public static Db_cfg_itm new_byte (String grp, String key, byte val) {return new Db_cfg_itm(grp , key, Byte_.Xto_str(val));}
+ public static Db_cfg_itm new_yn (String key, boolean val) {return new Db_cfg_itm(Grp_none , key, Yn.Xto_str(val));}
+ public static Db_cfg_itm new_yn (String grp, String key, boolean val) {return new Db_cfg_itm(grp , key, Yn.Xto_str(val));}
+ public static Db_cfg_itm new_DateAdp (String key, DateAdp val) {return new Db_cfg_itm(Grp_none , key, val.XtoStr_fmt_yyyyMMdd_HHmmss());}
+ public static Db_cfg_itm new_DateAdp (String grp, String key, DateAdp val) {return new Db_cfg_itm(grp , key, val.XtoStr_fmt_yyyyMMdd_HHmmss());}
+ public static Db_cfg_itm new_guid (String key, Guid_adp val) {return new Db_cfg_itm(Grp_none , key, val.XtoStr());}
+ public static Db_cfg_itm new_guid (String grp, String key, Guid_adp val) {return new Db_cfg_itm(grp , key, val.XtoStr());}
+
+ public static final Db_cfg_itm Empty = new Db_cfg_itm("empty", "empty", null);
+}
diff --git a/400_xowa/src/gplx/dbs/cfgs/Db_cfg_tbl.java b/400_xowa/src/gplx/dbs/cfgs/Db_cfg_tbl.java
index 54cd7f0ff..ed8428ed2 100644
--- a/400_xowa/src/gplx/dbs/cfgs/Db_cfg_tbl.java
+++ b/400_xowa/src/gplx/dbs/cfgs/Db_cfg_tbl.java
@@ -16,72 +16,104 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.dbs.cfgs; import gplx.*; import gplx.dbs.*;
-import gplx.dbs.*;
-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 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 (schema_is_1) {
- tbl_name = tbl_v1;
- fld_prefix = "cfg_";
- }
- else
- tbl_name = tbl_v2;
- fld_grp = flds.Add_str(fld_prefix + "grp", 255);
- fld_key = flds.Add_str(fld_prefix + "key", 255);
- fld_val = flds.Add_str(fld_prefix + "val", 1024);
- if (created) {
- Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
- , Db_meta_idx.new_unique_by_tbl(tbl_name, "main", fld_grp, fld_key, fld_val)
- );
- conn.Exec_create_tbl_and_idx(meta);
- }
- stmt_insert = stmt_update = stmt_select = null;
+import gplx.core.primitives.*;
+public class Db_cfg_tbl implements RlsAble {
+ private final String tbl_name; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
+ private final String fld_grp, fld_key, fld_val;
+ private Db_stmt stmt_insert, stmt_update, stmt_select;
+ public Db_conn Conn() {return conn;} private final Db_conn conn;
+ public Db_cfg_tbl(Db_conn conn, String tbl_name) {
+ this.conn = conn; this.tbl_name = tbl_name;
+ this.fld_grp = flds.Add_str("cfg_grp", 255);
+ this.fld_key = flds.Add_str("cfg_key", 255);
+ this.fld_val = flds.Add_str("cfg_val", 1024);
+ conn.Rls_reg(this);
}
- public void Insert(String grp, String key, String val) {
- if (stmt_insert == null) stmt_insert = conn.Rls_reg(conn.Stmt_insert(tbl_name, flds));
+ public void Rls() {
+ stmt_insert = Db_stmt_.Rls(stmt_insert);
+ stmt_update = Db_stmt_.Rls(stmt_update);
+ stmt_select = Db_stmt_.Rls(stmt_select);
+ }
+ public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_tbl(tbl_name, "main", fld_grp, fld_key, fld_val)));}
+ public void Delete_val(String grp, String key) {conn.Stmt_delete(tbl_name, fld_grp, fld_key).Crt_str(fld_grp, grp).Crt_str(fld_key, key).Exec_delete();}
+ public void Delete_grp(String grp) {conn.Stmt_delete(tbl_name, fld_grp).Crt_str(fld_grp, grp).Exec_delete();}
+ public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empy).Exec_delete();}
+ public void Insert_yn (String grp, String key, boolean val) {Insert_str(grp, key, val ? "y" : "n");}
+ public void Insert_byte (String grp, String key, byte val) {Insert_str(grp, key, Byte_.Xto_str(val));}
+ public void Insert_int (String grp, String key, int val) {Insert_str(grp, key, Int_.Xto_str(val));}
+ public void Insert_long (String grp, String key, long val) {Insert_str(grp, key, Long_.Xto_str(val));}
+ public void Insert_date (String grp, String key, DateAdp val) {Insert_str(grp, key, val.XtoStr_fmt_yyyyMMdd_HHmmss());}
+ public void Insert_guid (String grp, String key, Guid_adp val) {Insert_str(grp, key, val.XtoStr());}
+ public void Insert_bry (String grp, String key, byte[] val) {Insert_str(grp, key, String_.new_utf8_(val));}
+ public void Insert_str (String grp, String key, String val) {
+ if (stmt_insert == null) stmt_insert = conn.Stmt_insert(tbl_name, flds);
stmt_insert.Clear().Val_str(fld_grp, grp).Val_str(fld_key, key).Val_str(fld_val, val).Exec_insert();
- }
- public void Update(String grp, String key, String val) {
- if (stmt_update == null) stmt_update = conn.Rls_reg(conn.Stmt_update_exclude(tbl_name, flds, fld_grp, fld_key));
+ }
+ public void Update_yn (String grp, String key, boolean val) {Update_str(grp, key, val ? "y" : "n");}
+ public void Update_byte (String grp, String key, byte val) {Update_str(grp, key, Byte_.Xto_str(val));}
+ public void Update_int (String grp, String key, int val) {Update_str(grp, key, Int_.Xto_str(val));}
+ public void Update_long (String grp, String key, long val) {Update_str(grp, key, Long_.Xto_str(val));}
+ public void Update_date (String grp, String key, DateAdp val) {Update_str(grp, key, val.XtoStr_fmt_yyyyMMdd_HHmmss());}
+ public void Update_guid (String grp, String key, Guid_adp val) {Update_str(grp, key, val.XtoStr());}
+ public void Update_bry (String grp, String key, byte[] val) {Update_str(grp, key, String_.new_utf8_(val));}
+ public void Update_str (String grp, String key, String val) {
+ if (stmt_update == null) stmt_update = conn.Stmt_update_exclude(tbl_name, flds, fld_grp, fld_key);
stmt_update.Clear().Val_str(fld_val, val).Crt_str(fld_grp, grp).Crt_str(fld_key, key).Exec_update();
}
- public int Select_as_int_or_fail(String grp, String key) {
- int rv = Select_as_int_or(grp, key, Int_.MinValue);
- 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);
+ public void Upsert_str (String grp, String key, String val) {
+ String cur_val = this.Select_str_or(grp, key, null);
+ if (cur_val == null) this.Insert_str(grp, key, val);
+ else this.Update_str(grp, key, val);
+ }
+ public boolean Select_yn (String grp, String key) {String val = Select_str(grp, key); return Parse_yn (grp, key, val);}
+ public byte Select_byte (String grp, String key) {String val = Select_str(grp, key); return Parse_byte (grp, key, val);}
+ public int Select_int (String grp, String key) {String val = Select_str(grp, key); return Parse_int (grp, key, val);}
+ public long Select_long (String grp, String key) {String val = Select_str(grp, key); return Parse_long (grp, key, val);}
+ public byte[] Select_bry (String grp, String key) {String val = Select_str(grp, key); return Parse_bry (grp, key, val);}
+ public DateAdp Select_date (String grp, String key) {String val = Select_str(grp, key); return Parse_date (grp, key, val);}
+ public Guid_adp Select_guid (String grp, String key) {String val = Select_str(grp, key); return Parse_guid (grp, key, val);}
+ public boolean Select_yn_or (String grp, String key, boolean or) {String val = Select_str_or(grp, key, null) ; return val == null ? or : Parse_yn (grp, key, val);}
+ public byte Select_byte_or (String grp, String key, byte or) {String val = Select_str_or(grp, key, null) ; return val == null ? or : Parse_byte (grp, key, val);}
+ public int Select_int_or (String grp, String key, int or) {String val = Select_str_or(grp, key, null) ; return val == null ? or : Parse_int (grp, key, val);}
+ public long Select_long_or (String grp, String key, long or) {String val = Select_str_or(grp, key, null) ; return val == null ? or : Parse_long (grp, key, val);}
+ public byte[] Select_bry_or (String grp, String key, byte[] or) {String val = Select_str_or(grp, key, null) ; return val == null ? or : Parse_bry (grp, key, val);}
+ public DateAdp Select_date_or (String grp, String key, DateAdp or) {String val = Select_str_or(grp, key, null) ; return val == null ? or : Parse_date (grp, key, val);}
+ public Guid_adp Select_guid_or (String grp, String key, Guid_adp or) {String val = Select_str_or(grp, key, null) ; return val == null ? or : Parse_guid (grp, key, val);}
+ public String Select_str (String grp, String key) {
+ String rv = Select_str_or(grp, key, null); if (rv == null) throw Err_.new_("cfg.missing; grp={0} key={1}", 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));
- Db_rdr rdr = Db_rdr_.Null;
- try {
- rdr = stmt_select.Clear()
- .Crt_str(fld_grp, grp)
- .Crt_str(fld_key, key)
- .Exec_select_as_rdr();
- return rdr.Move_next() ? rdr.Read_str(fld_val) : or;
- } finally {rdr.Rls();}
+ public String Select_str_or (String grp, String key, String or) {
+ if (stmt_select == null) stmt_select = conn.Stmt_select(tbl_name, String_.Ary(fld_val), fld_grp, fld_key);
+ Db_rdr rdr = stmt_select.Clear().Crt_str(fld_grp, grp).Crt_str(fld_key, key).Exec_select__rls_manual();
+ try {return rdr.Move_next() ? rdr.Read_str(fld_val) : or;} finally {rdr.Rls();}
}
- public Db_cfg_grp Select_as_grp(String grp) {
- Db_cfg_grp rv = null;
- Db_stmt stmt = conn.Stmt_select(tbl_name, flds, fld_grp);
- Db_rdr rdr = Db_rdr_.Null;
+ public Db_cfg_hash Select_as_hash(String grp) {
+ Db_cfg_hash rv = new Db_cfg_hash(grp);
+ Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld_grp).Crt_str(fld_grp, grp).Exec_select__rls_auto();
try {
- rdr = stmt.Clear().Crt_str(fld_grp, grp).Exec_select_as_rdr();
while (rdr.Move_next()) {
- if (rv == null) rv = new Db_cfg_grp(grp);
- rv.Upsert(rdr.Read_str(fld_key), rdr.Read_str(fld_val));
+ rv.Add(rdr.Read_str(fld_key), rdr.Read_str(fld_val));
}
}
finally {rdr.Rls();}
- return rv == null ? Db_cfg_grp.Null : rv;
+ return rv;
}
- public void Rls() {conn.Conn_term();}
+ // NOTE: Assert guarantees that a value exists in database and returns it (Select + Insert); (1) String val = Assert('grp', 'key', 'val'); (2) Update('grp', 'key', 'val2');
+ public boolean Assert_yn (String grp, String key, boolean or) {String val = Select_str_or(grp, key, null) ; if (val == null) {Insert_yn (grp, key, or); return or;} return Parse_yn (grp, key, val);}
+ public byte Assert_byte (String grp, String key, byte or) {String val = Select_str_or(grp, key, null) ; if (val == null) {Insert_byte (grp, key, or); return or;} return Parse_byte (grp, key, val);}
+ public int Assert_int (String grp, String key, int or) {String val = Select_str_or(grp, key, null) ; if (val == null) {Insert_int (grp, key, or); return or;} return Parse_int (grp, key, val);}
+ public long Assert_long (String grp, String key, long or) {String val = Select_str_or(grp, key, null) ; if (val == null) {Insert_long (grp, key, or); return or;} return Parse_long (grp, key, val);}
+ public byte[] Assert_bry (String grp, String key, byte[] or) {String val = Select_str_or(grp, key, null) ; if (val == null) {Insert_bry (grp, key, or); return or;} return Parse_bry (grp, key, val);}
+ public DateAdp Assert_date (String grp, String key, DateAdp or) {String val = Select_str_or(grp, key, null) ; if (val == null) {Insert_date (grp, key, or); return or;} return Parse_date (grp, key, val);}
+ public Guid_adp Assert_guid (String grp, String key, Guid_adp or) {String val = Select_str_or(grp, key, null) ; if (val == null) {Insert_guid (grp, key, or); return or;} return Parse_guid (grp, key, val);}
+ public String Assert_str (String grp, String key, String or) {String val = Select_str_or(grp, key, null) ; if (val == null) {Insert_str (grp, key, or); return or;} return val;}
+ private boolean Parse_yn (String grp, String key, String val) {try {return Yn.parse_(val) ;} catch (Exception e) {throw err_parse(e, grp, key, val, Bool_.Cls_val_name);}}
+ private byte Parse_byte (String grp, String key, String val) {try {return Byte_.parse_(val) ;} catch (Exception e) {throw err_parse(e, grp, key, val, Byte_.Cls_val_name);}}
+ private int Parse_int (String grp, String key, String val) {try {return Int_.parse_(val) ;} catch (Exception e) {throw err_parse(e, grp, key, val, Int_.Cls_val_name);}}
+ private long Parse_long (String grp, String key, String val) {try {return Long_.parse_(val) ;} catch (Exception e) {throw err_parse(e, grp, key, val, Long_.Cls_val_name);}}
+ private byte[] Parse_bry (String grp, String key, String val) {try {return Bry_.new_utf8_(val) ;} catch (Exception e) {throw err_parse(e, grp, key, val, Bry_.Cls_val_name);}}
+ private DateAdp Parse_date (String grp, String key, String val) {try {return DateAdp_.parse_gplx(val) ;} catch (Exception e) {throw err_parse(e, grp, key, val, DateAdp_.Cls_ref_name);}}
+ private Guid_adp Parse_guid (String grp, String key, String val) {try {return Guid_adp_.parse_(val) ;} catch (Exception e) {throw err_parse(e, grp, key, val, Guid_adp_.Cls_ref_name);}}
+ private Err err_parse(Exception e, String grp, String key, String val, String type) {return Err_.new_("cfg.val is not parseable; grp={0} key={1} val={2} type={3}", grp, key, val, type);}
}
diff --git a/400_xowa/src/gplx/dbs/schemas/Schema_loader_mgr_.java b/400_xowa/src/gplx/dbs/schemas/Schema_loader_mgr_.java
index 87698eecd..ef310fee1 100644
--- a/400_xowa/src/gplx/dbs/schemas/Schema_loader_mgr_.java
+++ b/400_xowa/src/gplx/dbs/schemas/Schema_loader_mgr_.java
@@ -18,31 +18,31 @@ along with this program. If not, see .
package gplx.dbs.schemas; import gplx.*; import gplx.dbs.*;
import gplx.dbs.qrys.*;
public class Schema_loader_mgr_ {
- public static final Schema_loader_mgr Null = new Schema_loader_mgr__null();
- public static final Schema_loader_mgr Sqlite = new Schema_loader_mgr__sqlite();
+ public static final Schema_loader_mgr Null = new Schema_loader_mgr__null();
+ public static final Schema_loader_mgr Sqlite = new Schema_loader_mgr__sqlite();
}
class Schema_loader_mgr__null implements Schema_loader_mgr {
public void Load(Schema_db_mgr db_mgr, Db_conn conn) {}
}
class Schema_loader_mgr__sqlite implements Schema_loader_mgr {
public void Load(Schema_db_mgr db_mgr, Db_conn conn) {
- Gfo_usr_dlg_._.Log_many("", "", "db.schema.load.bgn: conn=~{0}", conn.Url().Xto_api());
+ Gfo_usr_dlg_.I.Log_many("", "", "db.schema.load.bgn: conn=~{0}", conn.Conn_info().Xto_api());
Schema_tbl_mgr tbl_mgr = db_mgr.Tbl_mgr();
Db_qry__select_in_tbl qry = Db_qry__select_in_tbl.new_("sqlite_master", String_.Ary_empty, String_.Ary("type", "name", "sql"), Db_qry__select_in_tbl.Order_by_null);
- Db_stmt stmt = Db_stmt_.new_select_as_rdr(conn, qry);
- Db_rdr rdr = stmt.Exec_select_as_rdr();
- while (rdr.Move_next()) {
- int type = Schema_itm_tid.Xto_int(rdr.Read_str(0));
- switch (type) {
- case Schema_itm_tid.Tid_table:
- Schema_tbl_itm tbl_itm = new Schema_tbl_itm(rdr.Read_str(1), rdr.Read_str(2));
- tbl_mgr.Add(tbl_itm);
- break;
- case Schema_itm_tid.Tid_index: break; // noop for now
- default: throw Err_.unhandled(type);
+ Db_rdr rdr = conn.Stmt_new(qry).Exec_select__rls_auto();
+ try {
+ while (rdr.Move_next()) {
+ int type = Schema_itm_tid.Xto_int(rdr.Read_str(0));
+ switch (type) {
+ case Schema_itm_tid.Tid_table:
+ Schema_tbl_itm tbl_itm = new Schema_tbl_itm(rdr.Read_str(1), rdr.Read_str(2));
+ tbl_mgr.Add(tbl_itm);
+ break;
+ case Schema_itm_tid.Tid_index: break; // noop for now
+ default: throw Err_.unhandled(type);
+ }
}
- }
- rdr.Rls();
- Gfo_usr_dlg_._.Log_many("", "", "db.schema.load.end");
+ } finally {rdr.Rls();}
+ Gfo_usr_dlg_.I.Log_many("", "", "db.schema.load.end");
}
}
diff --git a/400_xowa/src/gplx/dbs/schemas/updates/Schema_update_cmd_.java b/400_xowa/src/gplx/dbs/schemas/updates/Schema_update_cmd_.java
index c95eed588..f9d85ec4e 100644
--- a/400_xowa/src/gplx/dbs/schemas/updates/Schema_update_cmd_.java
+++ b/400_xowa/src/gplx/dbs/schemas/updates/Schema_update_cmd_.java
@@ -29,7 +29,7 @@ class Schema_update_cmd__tbl_create implements Schema_update_cmd {
public boolean Exec_is_done() {return exec_is_done;} private boolean exec_is_done;
public void Exec(Schema_db_mgr db_mgr, Db_conn conn) {
if (db_mgr.Tbl_mgr().Has(tbl_name)) return;
- Gfo_usr_dlg_._.Log_many("", "", "schema.tbl.create: tbl=~{0}", tbl_name);
+ Gfo_usr_dlg_.I.Log_many("", "", "schema.tbl.create: tbl=~{0}", tbl_name);
Sqlite_engine_.Tbl_create(conn, tbl_name, tbl_sql);
Sqlite_engine_.Idx_create(conn, tbl_idxs);
exec_is_done = true;
diff --git a/400_xowa/src/gplx/dbs/schemas/updates/Schema_update_mgr.java b/400_xowa/src/gplx/dbs/schemas/updates/Schema_update_mgr.java
index b0a974982..7f1999789 100644
--- a/400_xowa/src/gplx/dbs/schemas/updates/Schema_update_mgr.java
+++ b/400_xowa/src/gplx/dbs/schemas/updates/Schema_update_mgr.java
@@ -25,7 +25,7 @@ public class Schema_update_mgr {
Schema_update_cmd cmd = (Schema_update_cmd)cmds.FetchAt(i);
try {cmd.Exec(schema_mgr, conn);}
catch (Exception e) {
- Gfo_usr_dlg_._.Warn_many("", "", "failed to run update cmd; name=~{0} err=~{1}", cmd.Name(), Err_.Message_gplx_brief(e));
+ Gfo_usr_dlg_.I.Warn_many("", "", "failed to run update cmd; name=~{0} err=~{1}", cmd.Name(), Err_.Message_gplx_brief(e));
}
}
}
diff --git a/400_xowa/src/gplx/dbs/schemas/updates/Schema_update_mgr_tst.java b/400_xowa/src/gplx/dbs/schemas/updates/Schema_update_mgr_tst.java
index 397c6f790..11d924185 100644
--- a/400_xowa/src/gplx/dbs/schemas/updates/Schema_update_mgr_tst.java
+++ b/400_xowa/src/gplx/dbs/schemas/updates/Schema_update_mgr_tst.java
@@ -40,7 +40,7 @@ class Schema_update_mgr_fxt {
public void Test_exec_n(Schema_update_cmd cmd) {Test_exec(cmd, Bool_.N);}
private void Test_exec(Schema_update_cmd cmd, boolean expd) {
update_mgr.Add(cmd);
- update_mgr.Update(db_mgr, Db_conn_.Null);
+ update_mgr.Update(db_mgr, Db_conn_.Empty);
Tfds.Eq(expd, cmd.Exec_is_done());
}
}
diff --git a/400_xowa/src/gplx/fsdb/Fsdb_db_file.java b/400_xowa/src/gplx/fsdb/Fsdb_db_file.java
new file mode 100644
index 000000000..188586bce
--- /dev/null
+++ b/400_xowa/src/gplx/fsdb/Fsdb_db_file.java
@@ -0,0 +1,28 @@
+/*
+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 .
+*/
+package gplx.fsdb; import gplx.*;
+import gplx.dbs.*; import gplx.dbs.cfgs.*;
+public class Fsdb_db_file {
+ public Fsdb_db_file(Io_url url, Db_conn conn) {
+ this.url = url; this.conn = conn;
+ this.tbl__core_cfg = new Db_cfg_tbl(conn, "xowa_cfg");
+ }
+ public Io_url Url() {return url;} private final Io_url url;
+ public Db_conn Conn() {return conn;} private final Db_conn conn;
+ public Db_cfg_tbl Tbl__cfg() {return tbl__core_cfg;} private final Db_cfg_tbl tbl__core_cfg;
+}
diff --git a/400_xowa/src/gplx/fsdb/Fsdb_db_mgr.java b/400_xowa/src/gplx/fsdb/Fsdb_db_mgr.java
new file mode 100644
index 000000000..e1526c229
--- /dev/null
+++ b/400_xowa/src/gplx/fsdb/Fsdb_db_mgr.java
@@ -0,0 +1,30 @@
+/*
+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 .
+*/
+package gplx.fsdb; import gplx.*;
+import gplx.dbs.*; import gplx.xowa.files.origs.*;
+public interface Fsdb_db_mgr {
+ boolean File__schema_is_1();
+ boolean File__solo_file();
+ String File__cfg_tbl_name();
+ Xof_orig_tbl[] File__orig_tbl_ary();
+ Fsdb_db_file File__mnt_file();
+ Fsdb_db_file File__abc_file__at(int mnt_id);
+ Fsdb_db_file File__atr_file__at(int mnt_id);
+ Fsdb_db_file File__bin_file__at(int mnt_id, int bin_id, String file_name);
+ Fsdb_db_file File__bin_file__new(int mnt_id, String file_name);
+}
diff --git a/400_xowa/src/gplx/fsdb/Fsdb_db_mgr_.java b/400_xowa/src/gplx/fsdb/Fsdb_db_mgr_.java
new file mode 100644
index 000000000..018bc8e67
--- /dev/null
+++ b/400_xowa/src/gplx/fsdb/Fsdb_db_mgr_.java
@@ -0,0 +1,44 @@
+/*
+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 .
+*/
+package gplx.fsdb; import gplx.*;
+import gplx.dbs.*; import gplx.xowa.*; import gplx.xowa.wikis.data.*;
+public class Fsdb_db_mgr_ {
+ public static Fsdb_db_mgr new_detect(String domain_str, Io_url wiki_dir, Io_url file_dir) {
+ Gfo_usr_dlg usr_dlg = Xoa_app_.Usr_dlg();
+ Fsdb_db_mgr rv = null;
+ rv = load_or_null(Xowd_db_layout.Itm_few, usr_dlg, wiki_dir, domain_str); if (rv != null) return rv;
+ rv = load_or_null(Xowd_db_layout.Itm_lot, usr_dlg, wiki_dir, domain_str); if (rv != null) return rv;
+ rv = load_or_null(Xowd_db_layout.Itm_all, usr_dlg, wiki_dir, domain_str); if (rv != null) return rv;
+ Io_url url = file_dir.GenSubFil(Fsdb_db_mgr__v1.Mnt_name); // EX: /xowa/file/en.wikipedia.org/wiki.mnt.sqlite3
+ if (Db_conn_bldr.I.Exists(url)) {
+ usr_dlg.Log_many("", "", "fsdb.db_core.v1: url=~{0}", url.Raw());
+ return new Fsdb_db_mgr__v1(file_dir);
+ }
+ usr_dlg.Log_many("", "", "fsdb.db_core.none: wiki_dir=~{0} file_dir=~{1}", wiki_dir.Raw(), file_dir.Raw());
+ return null;
+ }
+ private static Fsdb_db_mgr load_or_null(Xowd_db_layout layout, Gfo_usr_dlg usr_dlg, Io_url wiki_dir, String domain_str) {
+ Io_url main_core_url = wiki_dir.GenSubFil(Fsdb_db_mgr__v2_bldr.Main_core_name(layout, domain_str));
+ if (!Db_conn_bldr.I.Exists(main_core_url)) return null;
+ usr_dlg.Log_many("", "", "fsdb.db_core.v2: type=~{0} url=~{1}", layout.Name(), main_core_url.Raw());
+ Db_conn main_core_conn = Db_conn_bldr.I.Get(main_core_url);
+ Io_url user_core_url = wiki_dir.GenSubFil(Fsdb_db_mgr__v2_bldr.Make_user_name(domain_str));
+ Db_conn user_core_conn = Db_conn_bldr.I.Get(user_core_url);
+ return new Fsdb_db_mgr__v2(Fsdb_db_mgr__v2.Cfg__layout_file__get(main_core_conn), wiki_dir, new Fsdb_db_file(main_core_url, main_core_conn), new Fsdb_db_file(user_core_url, user_core_conn));
+ }
+}
diff --git a/400_xowa/src/gplx/fsdb/Fsdb_db_mgr__v1.java b/400_xowa/src/gplx/fsdb/Fsdb_db_mgr__v1.java
new file mode 100644
index 000000000..165b210ac
--- /dev/null
+++ b/400_xowa/src/gplx/fsdb/Fsdb_db_mgr__v1.java
@@ -0,0 +1,50 @@
+/*
+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 .
+*/
+package gplx.fsdb; import gplx.*;
+import gplx.dbs.*; import gplx.fsdb.meta.*; import gplx.xowa.files.origs.*;
+public class Fsdb_db_mgr__v1 implements Fsdb_db_mgr {
+ private final Io_url file_dir;
+ private final Fsdb_db_file orig_file, mnt_file, abc_file__main, abc_file__user, atr_file__main, atr_file__user;
+ private final Xof_orig_tbl[] orig_tbl_ary;
+ public Fsdb_db_mgr__v1(Io_url file_dir) {
+ this.file_dir = file_dir;
+ this.orig_file = new_db(file_dir.GenSubFil(Orig_name)); // EX: /xowa/enwiki/wiki.orig#00.sqlite3
+ this.mnt_file = new_db(file_dir.GenSubFil(Mnt_name)); // EX: /xowa/enwiki/wiki.mnt.sqlite3
+ this.abc_file__main = new_db(file_dir.GenSubFil_nest(Fsm_mnt_tbl.Mnt_name_main, Abc_name)); // EX: /xowa/enwiki/fsdb.main/fsdb.abc.sqlite3
+ this.atr_file__main = new_db(file_dir.GenSubFil_nest(Fsm_mnt_tbl.Mnt_name_main, Atr_name)); // EX: /xowa/enwiki/fsdb.main/fsdb.atr.00.sqlite3
+ this.abc_file__user = new_db(file_dir.GenSubFil_nest(Fsm_mnt_tbl.Mnt_name_user, Abc_name)); // EX: /xowa/enwiki/fsdb.user/fsdb.abc.sqlite3
+ this.atr_file__user = new_db(file_dir.GenSubFil_nest(Fsm_mnt_tbl.Mnt_name_user, Atr_name)); // EX: /xowa/enwiki/fsdb.user/fsdb.atr.00.sqlite3
+ this.orig_tbl_ary = new Xof_orig_tbl[] {new Xof_orig_tbl(orig_file.Conn(), this.File__schema_is_1())};
+ }
+ public boolean File__schema_is_1() {return Bool_.Y;}
+ public boolean File__solo_file() {return Bool_.N;}
+ public String File__cfg_tbl_name() {return "fsdb_cfg";}
+ public Xof_orig_tbl[] File__orig_tbl_ary() {return orig_tbl_ary;}
+ public Fsdb_db_file File__mnt_file() {return mnt_file;}
+ public Fsdb_db_file File__abc_file__at(int mnt_id) {return mnt_id == Fsm_mnt_mgr.Mnt_idx_main ? abc_file__main : abc_file__user;}
+ public Fsdb_db_file File__atr_file__at(int mnt_id) {return mnt_id == Fsm_mnt_mgr.Mnt_idx_main ? atr_file__main : atr_file__user;}
+ public Fsdb_db_file File__bin_file__at(int mnt_id, int bin_id, String file_name) {
+ String bin_name = "fsdb.bin." + Int_.Xto_str_pad_bgn_zero(bin_id, 4) + ".sqlite3";
+ String mnt_name = mnt_id == Fsm_mnt_mgr.Mnt_idx_main ? Fsm_mnt_tbl.Mnt_name_main : Fsm_mnt_tbl.Mnt_name_user;
+ Io_url url = file_dir.GenSubFil_nest(mnt_name, bin_name); // EX: /xowa/enwiki/fsdb.main/fsdb.bin.0000.sqlite3
+ return new Fsdb_db_file(url, Db_conn_bldr.I.Get(url));
+ }
+ public Fsdb_db_file File__bin_file__new(int mnt_id, String file_name) {throw Err_.not_implemented_();}
+ public static final String Orig_name = "wiki.orig#00.sqlite3", Mnt_name = "wiki.mnt.sqlite3", Abc_name = "fsdb.abc.sqlite3", Atr_name= "fsdb.atr.00.sqlite3";
+ private static Fsdb_db_file new_db(Io_url file) {return new Fsdb_db_file(file, Db_conn_bldr.I.Get(file));}
+}
diff --git a/400_xowa/src/gplx/fsdb/Fsdb_db_mgr__v2.java b/400_xowa/src/gplx/fsdb/Fsdb_db_mgr__v2.java
new file mode 100644
index 000000000..74f5a19ae
--- /dev/null
+++ b/400_xowa/src/gplx/fsdb/Fsdb_db_mgr__v2.java
@@ -0,0 +1,63 @@
+/*
+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 .
+*/
+package gplx.fsdb; import gplx.*;
+import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.fsdb.meta.*; import gplx.xowa.files.origs.*; import gplx.xowa.wikis.data.*;
+public class Fsdb_db_mgr__v2 implements Fsdb_db_mgr {
+ private final Xowd_db_layout layout; private final Io_url wiki_dir;
+ private final Fsdb_db_file file_main_core, file_user_core;
+ private final Xof_orig_tbl[] orig_tbl_ary;
+ public Fsdb_db_mgr__v2(Xowd_db_layout layout, Io_url wiki_dir, Fsdb_db_file file_main_core, Fsdb_db_file file_user_core) {
+ this.layout = layout; this.wiki_dir = wiki_dir;
+ this.file_main_core = file_main_core; this.file_user_core = file_user_core;
+ this.orig_tbl_ary = new Xof_orig_tbl[]
+ { new Xof_orig_tbl(file_main_core.Conn(), this.File__schema_is_1())
+ , new Xof_orig_tbl(file_user_core.Conn(), this.File__schema_is_1())
+ };
+ }
+ public boolean File__schema_is_1() {return Bool_.N;}
+ public boolean File__solo_file() {return layout.Tid_is_all_or_few();}
+ public String File__cfg_tbl_name() {return Cfg_tbl_name;}
+ public Xof_orig_tbl[] File__orig_tbl_ary() {return orig_tbl_ary;}
+ public Fsdb_db_file File__mnt_file() {return file_main_core;}
+ public Fsdb_db_file File__abc_file__at(int mnt_id) {return mnt_id == Fsm_mnt_mgr.Mnt_idx_main ? file_main_core: file_user_core;}
+ public Fsdb_db_file File__atr_file__at(int mnt_id) {return mnt_id == Fsm_mnt_mgr.Mnt_idx_main ? file_main_core: file_user_core;}
+ public Fsdb_db_file File__bin_file__at(int mnt_id, int bin_id, String file_name) {
+ if (mnt_id == Fsm_mnt_mgr.Mnt_idx_user) return file_user_core;
+ if (layout.Tid_is_all_or_few()) return file_main_core;
+ Io_url url = wiki_dir.GenSubFil(file_name);
+ Db_conn conn = Db_conn_bldr.I.Get(url);
+ return new Fsdb_db_file(url, conn);
+ }
+ public Fsdb_db_file File__bin_file__new(int mnt_id, String file_name) {
+ if (mnt_id == Fsm_mnt_mgr.Mnt_idx_user) return Fsdb_db_mgr__v2_bldr.Make_bin_tbl(file_user_core);
+ if (layout.Tid_is_all_or_few()) return Fsdb_db_mgr__v2_bldr.Make_bin_tbl(file_main_core);
+ Io_url url = wiki_dir.GenSubFil(file_name);
+ Db_conn conn = Db_conn_bldr.I.New(url);
+ Db_cfg_tbl cfg_tbl = new Db_cfg_tbl(conn, Cfg_tbl_name); cfg_tbl.Create_tbl();
+ return Fsdb_db_mgr__v2_bldr.Make_bin_tbl(new Fsdb_db_file(url, conn));
+ }
+ public static final String Cfg_tbl_name = "xowa_cfg";
+ public static Xowd_db_layout Cfg__layout_file__get(Db_conn main_core_conn) {
+ Db_cfg_tbl cfg_tbl = new Db_cfg_tbl(main_core_conn, "xowa_cfg");
+ return Xowd_db_layout.get_(cfg_tbl.Select_str_or(gplx.xowa.wikis.Xow_cfg_consts.Grp__bldr_fsdb, Cfg_key__layout_file, Xowd_db_layout.Name_few));
+ }
+ public static void Cfg__layout_file__set(Db_cfg_tbl cfg_tbl, Xowd_db_layout v) {
+ cfg_tbl.Insert_str(gplx.xowa.wikis.Xow_cfg_consts.Grp__bldr_fsdb, Cfg_key__layout_file, v.Name());
+ }
+ private static final String Cfg_key__layout_file = "layout_file";
+}
diff --git a/400_xowa/src/gplx/fsdb/Fsdb_db_mgr__v2_bldr.java b/400_xowa/src/gplx/fsdb/Fsdb_db_mgr__v2_bldr.java
new file mode 100644
index 000000000..9a8118e4a
--- /dev/null
+++ b/400_xowa/src/gplx/fsdb/Fsdb_db_mgr__v2_bldr.java
@@ -0,0 +1,107 @@
+/*
+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 .
+*/
+package gplx.fsdb; import gplx.*;
+import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.fsdb.meta.*; import gplx.fsdb.data.*; import gplx.xowa.files.origs.*;
+import gplx.xowa.*; import gplx.xowa.wikis.data.*; import gplx.xowa.bldrs.infos.*;
+public class Fsdb_db_mgr__v2_bldr {
+ public Fsdb_db_mgr__v2 Make(Xowe_wiki wiki) {
+ Xowd_db_layout layout = wiki.Data_mgr__core_mgr().Props().Layout_file();
+ String domain_str = wiki.Domain_str();
+ Io_url wiki_dir = wiki.Fsys_mgr().Root_dir();
+ String main_core_name = Main_core_name(layout, domain_str);
+ Fsdb_db_file main_core_file = Make_core_file_main(wiki, wiki_dir, main_core_name, layout);
+ Fsdb_db_file user_core_file = Make_core_file_user(wiki, wiki_dir, Make_user_name(domain_str), main_core_name);
+ return new Fsdb_db_mgr__v2(layout, wiki_dir, main_core_file, user_core_file);
+ }
+ private Fsdb_db_file Make_core_file_main(Xowe_wiki wiki, Io_url wiki_dir, String main_core_name, Xowd_db_layout layout) {
+ Io_url url = wiki_dir.GenSubFil(main_core_name);
+ Db_conn conn = layout.Tid_is_all() ? Db_conn_bldr.I.Get(url) : Db_conn_bldr.I.New(url); // if all, use existing (assumes same file name); else, create new
+ conn.Txn_bgn();
+ Fsdb_db_file rv = Make_core_file(url, conn, schema_is_1, Fsm_mnt_mgr.Mnt_idx_main);
+ if (!layout.Tid_is_all()) // do not make cfg data if all
+ Make_cfg_data(wiki, main_core_name, rv, Main_core_tid(layout), -1);
+ Fsdb_db_mgr__v2.Cfg__layout_file__set(rv.Tbl__cfg(), layout);
+ conn.Txn_end();
+ return rv;
+ }
+ private Fsdb_db_file Make_core_file_user(Xowe_wiki wiki, Io_url wiki_dir, String user_file_name, String main_core_name) { // always create file; do not create mnt_tbl;
+ Io_url url = wiki_dir.GenSubFil(user_file_name);
+ Db_conn conn = Db_conn_bldr.I.New(url);
+ conn.Txn_bgn();
+ Fsdb_db_file rv = Make_core_file(url, conn, schema_is_1, Fsm_mnt_mgr.Mnt_idx_user);
+ Fsm_bin_tbl dbb_tbl = new Fsm_bin_tbl(conn, schema_is_1, Fsm_mnt_mgr.Mnt_idx_user); dbb_tbl.Insert(0, user_file_name);
+ Make_bin_tbl(rv);
+ Make_cfg_data(wiki, main_core_name, rv, Xowd_db_file_.Tid_file_user, -1);
+ conn.Txn_end();
+ return rv;
+ }
+ private Fsdb_db_file Make_core_file(Io_url core_url, Db_conn core_conn, boolean schema_is_1, int mnt_id) {
+ Fsdb_db_file rv = new Fsdb_db_file(core_url, core_conn);
+ Db_cfg_tbl cfg_tbl = rv.Tbl__cfg();
+ cfg_tbl.Create_tbl();
+ cfg_tbl.Insert_int(Fsm_cfg_mgr.Grp_core, Fsm_cfg_mgr.Key_next_id , 1); // start next_id at 1
+ cfg_tbl.Insert_yn(Fsm_cfg_mgr.Grp_core, Fsm_cfg_mgr.Key_schema_thm_page , Bool_.Y); // new dbs automatically have page and time in fsdb_xtn_tm
+ cfg_tbl.Insert_yn(Fsm_cfg_mgr.Grp_core, Fsm_cfg_mgr.Key_patch_next_id , Bool_.Y); // new dbs automatically have correct next_id
+ Fsm_mnt_mgr.Patch(cfg_tbl);
+ Xof_orig_tbl orig_tbl = new Xof_orig_tbl(core_conn, schema_is_1); orig_tbl.Create_tbl();
+ if (mnt_id == Fsm_mnt_mgr.Mnt_idx_main) {
+ Fsm_mnt_tbl mnt_tbl = new Fsm_mnt_tbl(core_conn, schema_is_1); mnt_tbl.Create_tbl();
+ cfg_tbl.Insert_int("core", "mnt.insert_idx", Fsm_mnt_mgr.Mnt_idx_user);
+ }
+ Fsm_atr_tbl dba_tbl = new Fsm_atr_tbl(core_conn, schema_is_1); dba_tbl.Create_tbl();
+ dba_tbl.Insert(mnt_id, core_url.NameAndExt());
+ Fsm_bin_tbl dbb_tbl = new Fsm_bin_tbl(core_conn, schema_is_1, mnt_id); dbb_tbl.Create_tbl();
+ Fsd_dir_tbl dir_tbl = new Fsd_dir_tbl(core_conn, schema_is_1); dir_tbl.Create_tbl();
+ Fsd_fil_tbl fil_tbl = new Fsd_fil_tbl(core_conn, schema_is_1, mnt_id); fil_tbl.Create_tbl();
+ Fsd_thm_tbl thm_tbl = new Fsd_thm_tbl(core_conn, schema_is_1, mnt_id, Bool_.Y); thm_tbl.Create_tbl();
+ return rv;
+ }
+ public static Fsdb_db_file Make_bin_tbl(Fsdb_db_file file) {
+ Fsd_bin_tbl bin_tbl = new Fsd_bin_tbl(file.Conn(), schema_is_1); bin_tbl.Create_tbl();
+ return file;
+ }
+ public static String Main_core_name(Xowd_db_layout layout, String wiki_domain) {
+ switch (layout.Tid()) {
+ case Xowd_db_layout.Const_all: return Main_core_name_all(wiki_domain);
+ case Xowd_db_layout.Const_few: return Main_core_name_few(wiki_domain);
+ case Xowd_db_layout.Const_lot: return Main_core_name_lot(wiki_domain);
+ default: throw Err_.not_implemented_();
+ }
+ }
+ private static byte Main_core_tid(Xowd_db_layout layout) {
+ switch (layout.Tid()) {
+ case Xowd_db_layout.Const_all: return Xowd_db_file_.Tid_core;
+ case Xowd_db_layout.Const_few: return Xowd_db_file_.Tid_file_solo;
+ case Xowd_db_layout.Const_lot: return Xowd_db_file_.Tid_file_core;
+ default: throw Err_.not_implemented_();
+ }
+ }
+ public static void Make_cfg_data(Xowe_wiki wiki, String file_core_name, Fsdb_db_file file, byte file_tid, int part_id) {
+ Db_cfg_tbl cfg_tbl = file.Tbl__cfg();
+ Xowd_db_file core_db = wiki.Data_mgr__core_mgr().Db__core();
+ core_db.Info_session().Save(cfg_tbl);
+ Xob_info_file info_file = new Xob_info_file(-1, Xowd_db_file_.To_key(file_tid), Xob_info_file.Ns_ids_empty, part_id, Guid_adp_.random_(), 2, file_core_name, file.Url().NameAndExt());
+ info_file.Save(cfg_tbl);
+ }
+ private static String Main_core_name_all(String wiki_domain) {return wiki_domain + ".xowa";} // EX: en.wikipedia.org.xowa
+ private static String Main_core_name_few(String wiki_domain) {return wiki_domain + "-file.xowa";} // EX: en.wikipedia.org-file.xowa
+ private static String Main_core_name_lot(String wiki_domain) {return wiki_domain + "-file-core.xowa";} // EX: en.wikipedia.org-file-core.xowa
+ public static String Make_user_name(String wiki_domain) {return wiki_domain + "-file-user.xowa";} // EX: en.wikipedia.org-file-user.xowa
+ private static final boolean schema_is_1 = false;
+ public static final Fsdb_db_mgr__v2_bldr I = new Fsdb_db_mgr__v2_bldr(); Fsdb_db_mgr__v2_bldr() {}
+}
diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_bin_tbl.java b/400_xowa/src/gplx/fsdb/data/Fsd_bin_tbl.java
index 8c0be927c..0b8655fbd 100644
--- a/400_xowa/src/gplx/fsdb/data/Fsd_bin_tbl.java
+++ b/400_xowa/src/gplx/fsdb/data/Fsd_bin_tbl.java
@@ -18,76 +18,66 @@ along with this program. If not, see .
package gplx.fsdb.data; import gplx.*; import gplx.fsdb.*;
import gplx.dbs.*; import gplx.ios.*;
import gplx.dbs.engines.sqlite.*;
-public class Fsd_bin_tbl {
- private String tbl_name = "file_data_bin"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
- 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 schema_is_1) {
- this.conn = new_conn; flds.Clear();
- String fld_prefix = "";
- if (schema_is_1) {
- tbl_name = "fsdb_bin";
- fld_prefix = "bin_";
- }
- fld_owner_id = flds.Add_int(fld_prefix + "owner_id");
- fld_owner_tid = flds.Add_byte(fld_prefix + "owner_tid");
- fld_part_id = flds.Add_int(fld_prefix + "part_id");
- fld_data_url = flds.Add_str(fld_prefix + "data_url", 255);
- fld_data = flds.Add_bry(fld_prefix + "data"); // mediumblob
- if (created) {
- Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
- , Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_owner_id)
- );
- conn.Exec_create_tbl_and_idx(meta);
- }
+public class Fsd_bin_tbl implements RlsAble {
+ private final String tbl_name = "fsdb_bin"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
+ private final String fld_owner_id, fld_owner_tid, fld_part_id, fld_data_url, fld_data;
+ private Db_conn conn; private Db_stmt stmt_insert, stmt_select; private final Bry_bfr tmp_bfr = Bry_bfr.reset_(Io_mgr.Len_kb);
+ public Fsd_bin_tbl(Db_conn conn, boolean schema_is_1) {
+ this.conn = conn;
+ fld_owner_id = flds.Add_int_pkey ("bin_owner_id");
+ fld_owner_tid = flds.Add_byte ("bin_owner_tid");
+ fld_part_id = flds.Add_int ("bin_part_id");
+ fld_data_url = flds.Add_str ("bin_data_url", 255);
+ fld_data = flds.Add_bry ("bin_data"); // mediumblob
+ conn.Rls_reg(this);
}
- public long Insert_rdr(int id, byte tid, long bin_len, Io_stream_rdr bin_rdr) {
- synchronized (tmp_bfr) {
- Db_stmt stmt = conn.Stmt_insert(tbl_name, flds);
- byte[] bin_ary = Io_stream_rdr_.Load_all_as_bry(tmp_bfr, bin_rdr);
- long rv = bin_ary.length;
- stmt.Clear()
- .Val_int(fld_owner_id, id)
- .Val_byte(fld_owner_tid, tid)
- .Val_int(fld_part_id, Null_part_id)
- .Val_str(fld_data_url, Null_data_url)
- .Val_bry(bin_ary)
- .Exec_insert();
- return rv;
- }
+ public void Rls() {
+ stmt_insert = Db_stmt_.Rls(stmt_insert);
+ stmt_select = Db_stmt_.Rls(stmt_select);
}
- public Io_stream_rdr Select_as_rdr(Db_conn conn, int owner_id) {
- Db_rdr rdr = Db_rdr_.Null;
- try {
- Db_stmt stmt = conn.Stmt_select(tbl_name, String_.Ary(fld_data), fld_owner_id);
- rdr = stmt.Clear().Crt_int(fld_owner_id, owner_id).Exec_select_as_rdr();
- return rdr.Move_next()
- ? Io_stream_rdr_.mem_(Read_bin_data(rdr))
- : Io_stream_rdr_.Null;
- }
- finally {rdr.Rls();}
+ public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds));}
+ public void Insert_bgn() {conn.Txn_bgn(); stmt_insert = conn.Stmt_insert(tbl_name, flds);}
+ public void Insert_commit() {conn.Txn_sav();}
+ public void Insert_end() {conn.Txn_end(); stmt_insert = Db_stmt_.Rls(stmt_insert);}
+ public void Insert_rdr(int id, byte tid, long bin_len, Io_stream_rdr bin_rdr) {
+ if (stmt_insert == null) stmt_insert = conn.Stmt_insert(tbl_name, flds);
+ byte[] bin_ary = null;
+ synchronized (tmp_bfr) {bin_ary = Io_stream_rdr_.Load_all_as_bry(tmp_bfr, bin_rdr);}
+ stmt_insert.Clear()
+ .Val_int(fld_owner_id, id)
+ .Val_byte(fld_owner_tid, tid)
+ .Val_int(fld_part_id, Part_id_null)
+ .Val_str(fld_data_url, Data_url_null)
+ .Val_bry(fld_data, bin_ary)
+ .Exec_insert();
+ }
+ public Io_stream_rdr Select_as_rdr(int owner_id) {
+ byte[] rv = Select(owner_id);
+ return rv == null
+ ? Io_stream_rdr_.Null
+ : Io_stream_rdr_.mem_(rv);
}
public boolean Select_to_url(int owner_id, Io_url url) {
- Db_rdr rdr = Db_rdr_.Null;
+ byte[] rv = Select(owner_id);
+ if (rv == null) return false;
+ Io_mgr._.SaveFilBry(url, rv);
+ return true;
+ }
+ private byte[] Select(int owner_id) {
+ if (stmt_select == null) stmt_select = conn.Stmt_select(tbl_name, String_.Ary(fld_data), fld_owner_id);
+ Db_rdr rdr = stmt_select.Clear().Crt_int(fld_owner_id, owner_id).Exec_select__rls_manual();
try {
- Db_stmt stmt = conn.Stmt_select(tbl_name, String_.Ary(fld_data), fld_owner_id);
- rdr = stmt.Clear().Crt_int(fld_owner_id, owner_id).Exec_select_as_rdr();
if (rdr.Move_next()) {
- byte[] bry = Read_bin_data(rdr);
- Io_mgr._.SaveFilBry(url, bry);
- return true;
+ byte[] rv = rdr.Read_bry(fld_data);
+ return rv == null ? Bry_.Empty : rv; // NOTE: bug in v0.10.1 where .ogg would save as null; return Bry_.Empty instead, else java.io.ByteArrayInputStream would fail on null
}
else
- return false;
+ return null;
}
finally {rdr.Rls();}
}
- private byte[] Read_bin_data(Db_rdr rdr) {
- byte[] rv = rdr.Read_bry(fld_data);
- return rv == null ? Bry_.Empty : rv; // NOTE: bug in v0.10.1 where .ogg would save as null; return Bry_.Empty instead, else java.io.ByteArrayInputStream would fail on null
- }
public static final byte Owner_tid_fil = 1, Owner_tid_thm = 2;
- public static final int Null_db_bin_id = -1, Null_size = -1, Null_part_id = -1;
- public static final String Null_data_url = "";
+ public static final int Bin_db_id_null = -1, Size_null = -1;
+ private static final int Part_id_null = -1;
+ private static final String Data_url_null = "";
}
diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_dir_itm.java b/400_xowa/src/gplx/fsdb/data/Fsd_dir_itm.java
index 2a65a21e3..e6710246c 100644
--- a/400_xowa/src/gplx/fsdb/data/Fsd_dir_itm.java
+++ b/400_xowa/src/gplx/fsdb/data/Fsd_dir_itm.java
@@ -17,9 +17,11 @@ along with this program. If not, see .
*/
package gplx.fsdb.data; import gplx.*; import gplx.fsdb.*;
public class Fsd_dir_itm {
- public Fsd_dir_itm(int id, int owner, String name) {this.id = id; this.owner = owner; this.name = name;}
- public int Id() {return id;} private final int id;
- public int Owner() {return owner;} private final int owner;
- public String Name() {return name;} private final String name;
- public static final Fsd_dir_itm Null = new Fsd_dir_itm(0, 0, "");
+ public Fsd_dir_itm(int dir_id, int owner, byte[] name) {this.dir_id = dir_id; this.owner = owner; this.name = name;}
+ public int Dir_id() {return dir_id;} private final int dir_id;
+ public int Owner() {return owner;} private final int owner;
+ public byte[] Name() {return name;} private final byte[] name;
+
+ public static final int Owner_root = 0;
+ public static final Fsd_dir_itm Null = null;
}
diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_dir_tbl.java b/400_xowa/src/gplx/fsdb/data/Fsd_dir_tbl.java
index 60a7cc792..61eda2657 100644
--- a/400_xowa/src/gplx/fsdb/data/Fsd_dir_tbl.java
+++ b/400_xowa/src/gplx/fsdb/data/Fsd_dir_tbl.java
@@ -17,50 +17,47 @@ along with this program. If not, see .
*/
package gplx.fsdb.data; import gplx.*; import gplx.fsdb.*;
import gplx.dbs.*;
-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 schema_is_1) {
- this.conn = new_conn; flds.Clear();
- String fld_prefix = "";
- if (schema_is_1) {
- tbl_name = "fsdb_dir";
- fld_prefix = "dir_";
- }
- fld_id = flds.Add_int(fld_prefix + "id");
- fld_owner_id = flds.Add_int(fld_prefix + "owner_id");
- fld_name = flds.Add_str(fld_prefix + "name", 255);
- if (created) {
- Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
- , Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_id)
- , Db_meta_idx.new_normal_by_tbl(tbl_name, "name", fld_name, fld_owner_id, fld_id)
- );
- conn.Exec_create_tbl_and_idx(meta);
- }
- stmt_insert = stmt_update = stmt_select_by_name = null;
+public class Fsd_dir_tbl implements RlsAble {
+ private final String tbl_name = "fsdb_dir"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
+ private final String fld_id, fld_owner_id, fld_name;
+ private final Db_conn conn; private Db_stmt stmt_insert, stmt_update, stmt_select_by_name;
+ public Fsd_dir_tbl(Db_conn conn, boolean schema_is_1) {
+ this.conn = conn;
+ this.fld_id = flds.Add_int_pkey ("dir_id");
+ this.fld_owner_id = flds.Add_int ("dir_owner_id");
+ this.fld_name = flds.Add_str ("dir_name", 255);
+ conn.Rls_reg(this);
}
- public void Insert(int id, String name, int owner_id) {
- if (stmt_insert == null) stmt_insert = conn.Rls_reg(conn.Stmt_insert(tbl_name, flds));
+ public void Rls() {
+ stmt_insert = Db_stmt_.Rls(stmt_insert);
+ stmt_update = Db_stmt_.Rls(stmt_update);
+ stmt_select_by_name = Db_stmt_.Rls(stmt_select_by_name);
+ }
+ public void Create_tbl() {
+ conn.Ddl_create_tbl
+ ( Db_meta_tbl.new_(tbl_name, flds
+ , Db_meta_idx.new_normal_by_tbl(tbl_name, "name", fld_name, fld_owner_id, fld_id)));
+ }
+ public void Insert(int id, byte[] name, int owner_id) {
+ if (stmt_insert == null) stmt_insert = conn.Stmt_insert(tbl_name, flds);
stmt_insert.Clear()
.Val_int(fld_id, id)
.Val_int(fld_owner_id, owner_id)
- .Val_str(fld_name, name)
+ .Val_bry_as_str(fld_name, name)
.Exec_insert();
}
- public void Update(int id, String name, int owner_id) {
- if (stmt_update == null) stmt_update = conn.Rls_reg(conn.Stmt_update_exclude(tbl_name, flds, fld_id));
+ public void Update(int id, byte[] name, int owner_id) {
+ if (stmt_update == null) stmt_update = conn.Stmt_update_exclude(tbl_name, flds, fld_id);
stmt_update.Clear()
.Val_int(fld_owner_id, owner_id)
- .Val_str(fld_name, name)
+ .Val_bry_as_str(fld_name, name)
.Crt_int(fld_id, id)
.Exec_update();
}
- public Fsd_dir_itm Select_itm(String name) {
- if (stmt_select_by_name == null) stmt_select_by_name = conn.Rls_reg(conn.Stmt_select(tbl_name, flds, fld_name));
- Db_rdr rdr = Db_rdr_.Null;
+ public Fsd_dir_itm Select_or_null(byte[] name) {
+ if (stmt_select_by_name == null) stmt_select_by_name = conn.Stmt_select(tbl_name, flds, fld_name);
+ Db_rdr rdr = stmt_select_by_name.Clear().Crt_bry_as_str(fld_name, name).Exec_select__rls_manual();
try {
- rdr = stmt_select_by_name.Clear().Crt_str(fld_name, name).Exec_select_as_rdr();
return rdr.Move_next()
? new Fsd_dir_itm(rdr.Read_int(fld_id), rdr.Read_int(fld_owner_id), name)
: Fsd_dir_itm.Null
diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_fil_itm.java b/400_xowa/src/gplx/fsdb/data/Fsd_fil_itm.java
index 18f22ca15..b3f1b465b 100644
--- a/400_xowa/src/gplx/fsdb/data/Fsd_fil_itm.java
+++ b/400_xowa/src/gplx/fsdb/data/Fsd_fil_itm.java
@@ -17,16 +17,18 @@ along with this program. If not, see .
*/
package gplx.fsdb.data; import gplx.*; import gplx.fsdb.*;
public class Fsd_fil_itm {
- public int Id() {return id;} private int id;
- public int Owner() {return owner;} private int owner;
- public int Ext_id() {return ext_id;} private int ext_id;
- public String Name() {return name;} private String name;
- public int Db_bin_id() {return bin_db_id;} private int bin_db_id;
- public int Mnt_id() {return mnt_id;} public Fsd_fil_itm Mnt_id_(int v) {mnt_id = v; return this;} private int mnt_id;
- public Fsd_fil_itm Init(int id, int owner, int ext_id, String name, int bin_db_id) {this.id = id; this.owner = owner; this.ext_id = ext_id; this.name = name; this.bin_db_id = bin_db_id; return this;}
- public void Init_for_insert(int bin_db_id, int dir_id, int fil_id) {
- this.bin_db_id = bin_db_id; this.owner = dir_id; this.id = fil_id;
+ public Fsd_fil_itm Ctor(int mnt_id, int dir_id, int fil_id, int bin_db_id, byte[] name, int ext_id) {
+ this.mnt_id = mnt_id; this.dir_id = dir_id; this.fil_id = fil_id; this.bin_db_id = bin_db_id; this.name = name; this.ext_id = ext_id;
+ return this;
+ }
+ public int Mnt_id() {return mnt_id;} private int mnt_id;
+ public int Fil_id() {return fil_id;} private int fil_id;
+ public int Dir_id() {return dir_id;} private int dir_id;
+ public int Bin_db_id() {return bin_db_id;} private int bin_db_id;
+ public byte[] Name() {return name;} private byte[] name;
+ public int Ext_id() {return ext_id;} private int ext_id;
+ public static final Fsd_fil_itm Null = null;
+ public static byte[] Gen_cache_key(Bry_bfr bfr, int dir_id, byte[] name) {
+ return bfr.Add_int_variable(dir_id).Add_byte_pipe().Add(name).Xto_bry_and_clear();
}
- public static final int Null_id = 0;
- public static final Fsd_fil_itm Null = new Fsd_fil_itm().Init(Null_id, 0, 0, "", Fsd_bin_tbl.Null_db_bin_id);
}
diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_fil_tbl.java b/400_xowa/src/gplx/fsdb/data/Fsd_fil_tbl.java
index 6a3ba158f..88af814b9 100644
--- a/400_xowa/src/gplx/fsdb/data/Fsd_fil_tbl.java
+++ b/400_xowa/src/gplx/fsdb/data/Fsd_fil_tbl.java
@@ -17,80 +17,87 @@ along with this program. If not, see .
*/
package gplx.fsdb.data; import gplx.*; import gplx.fsdb.*;
import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.dbs.engines.sqlite.*;
-public class Fsd_fil_tbl {
- private String tbl_name = "file_data_fil"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
- 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 schema_is_1) {
- this.conn = new_conn; flds.Clear();
- String fld_prefix = "";
- if (schema_is_1) {
- tbl_name = "fsdb_fil";
- fld_prefix = "fil_";
- }
- fld_id = flds.Add_int(fld_prefix + "id");
- fld_owner_id = flds.Add_int(fld_prefix + "owner_id");
- fld_xtn_id = flds.Add_int(fld_prefix + "xtn_id");
- fld_ext_id = flds.Add_int(fld_prefix + "ext_id");
- fld_bin_db_id = flds.Add_int(fld_prefix + "bin_db_id"); // group ints at beginning of table
- fld_name = flds.Add_str(fld_prefix + "name", 255);
- fld_size = flds.Add_long(fld_prefix + "size");
- fld_modified = flds.Add_str(fld_prefix + "modified", 14); // stored as yyyyMMddHHmmss
- fld_hash = flds.Add_str(fld_prefix + "hash", 40);
- Idx_owner = Db_meta_idx.Bld_idx_name(tbl_name, "owner");
- if (created) {
- Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
- , Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_id)
- , Db_meta_idx.new_unique_by_name(tbl_name, Idx_owner, fld_owner_id, fld_name, fld_id)
- );
- conn.Exec_create_tbl_and_idx(meta);
- }
- stmt_insert = stmt_update = stmt_select_by_name = null;
+public class Fsd_fil_tbl implements RlsAble {
+ private final String tbl_name = "fsdb_fil"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
+ private final String fld_id, fld_owner_id, fld_name, fld_xtn_id, fld_ext_id, fld_size, fld_modified, fld_hash, fld_bin_db_id;
+ private final String idx_owner;
+ private Db_conn conn; private Db_stmt stmt_insert, stmt_update, stmt_select_by_name; private int mnt_id;
+ public Fsd_fil_tbl(Db_conn conn, boolean schema_is_1, int mnt_id) {
+ this.conn = conn; this.mnt_id = mnt_id;
+ this.fld_id = flds.Add_int_pkey ("fil_id");
+ this.fld_owner_id = flds.Add_int ("fil_owner_id");
+ this.fld_xtn_id = flds.Add_int ("fil_xtn_id");
+ this.fld_ext_id = flds.Add_int ("fil_ext_id");
+ this.fld_bin_db_id = flds.Add_int ("fil_bin_db_id"); // group ints at beginning of table
+ this.fld_name = flds.Add_str ("fil_name", 255);
+ this.fld_size = flds.Add_long ("fil_size");
+ this.fld_modified = flds.Add_str ("fil_modified", 14); // stored as yyyyMMddHHmmss
+ this.fld_hash = flds.Add_str ("fil_hash", 40);
+ this.idx_owner = Db_meta_idx.Bld_idx_name(tbl_name, "owner");
+ conn.Rls_reg(this);
}
- public void Insert(int id, int owner_id, String name, int xtn_id, int ext_id, long size, DateAdp modified, String hash, int bin_db_id) {
- if (stmt_insert == null) stmt_insert = conn.Rls_reg(conn.Stmt_insert(tbl_name, flds));
+ public void Rls() {
+ stmt_insert = Db_stmt_.Rls(stmt_insert);
+ stmt_update = Db_stmt_.Rls(stmt_update);
+ stmt_select_by_name = Db_stmt_.Rls(stmt_select_by_name);
+ }
+ public void Create_tbl() {
+ conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds
+ , Db_meta_idx.new_unique_by_name(tbl_name, idx_owner, fld_owner_id, fld_name, fld_id)
+ ));
+ }
+ public void Insert(int id, int owner_id, byte[] name, int xtn_id, int ext_id, long size, int bin_db_id) {
+ if (stmt_insert == null) stmt_insert = conn.Stmt_insert(tbl_name, flds);
stmt_insert.Clear()
.Val_int(fld_id, id)
.Val_int(fld_owner_id, owner_id)
.Val_int(fld_xtn_id, xtn_id)
.Val_int(fld_ext_id, ext_id)
.Val_int(fld_bin_db_id, bin_db_id)
- .Val_str(fld_name, name)
+ .Val_bry_as_str(fld_name, name)
.Val_long(fld_size, size)
- .Val_str(fld_modified, Sqlite_engine_.X_date_to_str(modified))
- .Val_str(fld_hash, hash)
+ .Val_str(fld_modified, String_.Empty)
+ .Val_str(fld_hash, String_.Empty)
.Exec_insert();
}
- public void Update(int id, int owner_id, String name, int xtn_id, int ext_id, long size, DateAdp modified, String hash, int bin_db_id) {
- if (stmt_update == null) stmt_update = conn.Rls_reg(conn.Stmt_update_exclude(tbl_name, flds, fld_id));
+ public void Update(int id, int owner_id, byte[] name, int xtn_id, int ext_id, long size, int bin_db_id) {
+ if (stmt_update == null) stmt_update = conn.Stmt_update_exclude(tbl_name, flds, fld_id);
stmt_update.Clear()
.Val_int(fld_owner_id, owner_id)
.Val_int(fld_xtn_id, xtn_id)
.Val_int(fld_ext_id, ext_id)
.Val_int(fld_bin_db_id, bin_db_id)
- .Val_str(fld_name, name)
+ .Val_bry_as_str(fld_name, name)
.Val_long(fld_size, size)
- .Val_str(fld_modified, Sqlite_engine_.X_date_to_str(modified))
- .Val_str(fld_hash, hash)
.Crt_int(fld_id, id)
.Exec_update();
}
- public Fsd_fil_itm Select_itm_by_name(int dir_id, String fil_name) {
+ public Fsd_fil_itm Select_or_null(int dir_id, byte[] fil_name) {
if (stmt_select_by_name == null) {
- Db_qry__select_cmd qry = Db_qry__select_cmd.new_().From_(tbl_name).Cols_(flds.To_str_ary()).Where_(Db_crt_.eq_many_(fld_owner_id, fld_name)).Indexed_by_(Idx_owner);
- stmt_select_by_name = conn.Rls_reg(conn.Stmt_new(qry));
+ Db_qry__select_cmd qry = Db_qry__select_cmd.new_().From_(tbl_name).Cols_(flds.To_str_ary()).Where_(Db_crt_.eq_many_(fld_owner_id, fld_name)).Indexed_by_(idx_owner);
+ stmt_select_by_name = conn.Stmt_new(qry);
}
- Db_rdr rdr = Db_rdr_.Null;
- try {
- rdr = stmt_select_by_name.Clear()
+ Db_rdr rdr = stmt_select_by_name.Clear()
.Crt_int(fld_owner_id, dir_id)
- .Crt_str(fld_name, fil_name)
- .Exec_select_as_rdr();
- return rdr.Move_next()
- ? new Fsd_fil_itm().Init(rdr.Read_int(fld_id), rdr.Read_int(fld_owner_id), rdr.Read_int(fld_ext_id), rdr.Read_str(fld_name), rdr.Read_int(fld_bin_db_id))
- : Fsd_fil_itm.Null;
+ .Crt_bry_as_str(fld_name, fil_name)
+ .Exec_select__rls_manual();
+ try {
+ return rdr.Move_next() ? new_(mnt_id, rdr) : Fsd_fil_itm.Null;
}
finally {rdr.Rls();}
}
+ public void Select_all(Bry_bfr key_bfr, gplx.cache.Gfo_cache_mgr_bry cache) {
+ Db_rdr rdr = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empy).Exec_select__rls_auto();
+ try {
+ while (rdr.Move_next()) {
+ Fsd_fil_itm fil = new_(mnt_id, rdr);
+ byte[] cache_key = Fsd_fil_itm.Gen_cache_key(key_bfr, fil.Dir_id(), fil.Name());
+ cache.Add(cache_key, fil);
+ }
+ }
+ finally {rdr.Rls();}
+ }
+ private Fsd_fil_itm new_(int mnt_id, Db_rdr rdr) {
+ return new Fsd_fil_itm().Ctor(mnt_id, rdr.Read_int(fld_owner_id), rdr.Read_int(fld_id), rdr.Read_int(fld_bin_db_id), rdr.Read_bry_by_str(fld_name), rdr.Read_int(fld_ext_id));
+ }
}
diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_img_itm.java b/400_xowa/src/gplx/fsdb/data/Fsd_img_itm.java
index ff0d2ecd5..3140d2f45 100644
--- a/400_xowa/src/gplx/fsdb/data/Fsd_img_itm.java
+++ b/400_xowa/src/gplx/fsdb/data/Fsd_img_itm.java
@@ -17,11 +17,11 @@ along with this program. If not, see .
*/
package gplx.fsdb.data; import gplx.*; import gplx.fsdb.*;
public class Fsd_img_itm {
- public int Id() {return id;} public void Id_(int v) {this.id = v;} private int id;
- public int W() {return w;} public void W_(int v) {this.w = v;} private int w;
- public int H() {return h;} public void H_(int v) {this.h = v;} private int h;
- public int Db_bin_id() {return bin_db_id;} public Fsd_img_itm Db_bin_id_(int v) {bin_db_id = v; return this;} private int bin_db_id;
- public Fsd_img_itm Init_by_load(int id, int w, int h) {this.id = id; this.w = w; this.h = h; return this;}
- public static final Fsd_img_itm Null = new Fsd_img_itm();
- public static final int Bits_default = 8;
+ public void Ctor(int mnt_id, int dir_id, int fil_id, int bin_db_id) {
+ this.mnt_id = mnt_id; this.dir_id = dir_id; this.fil_id = fil_id; this.bin_db_id = bin_db_id;
+ }
+ public int Mnt_id() {return mnt_id;} private int mnt_id;
+ public int Fil_id() {return fil_id;} private int fil_id;
+ public int Dir_id() {return dir_id;} private int dir_id;
+ public int Bin_db_id() {return bin_db_id;} private int bin_db_id;
}
diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_thm_itm.java b/400_xowa/src/gplx/fsdb/data/Fsd_thm_itm.java
index 4809dd4f2..49a91a8fd 100644
--- a/400_xowa/src/gplx/fsdb/data/Fsd_thm_itm.java
+++ b/400_xowa/src/gplx/fsdb/data/Fsd_thm_itm.java
@@ -17,46 +17,35 @@ along with this program. If not, see .
*/
package gplx.fsdb.data; import gplx.*; import gplx.fsdb.*;
public class Fsd_thm_itm {
- public int Id() {return id;} private int id;
- public int Owner_id() {return owner_id;} private int owner_id;
- public int W() {return w;} private int w;
- public double Time() {return time;} private double time;
- public int Page() {return page;} private int page;
- public int H() {return h;} private int h;
- public long Size() {return size;} private long size;
- public String Modified() {return modified;} private String modified;
- public String Hash() {return hash;} private String hash;
- public int Dir_id() {return dir_id;} private int dir_id;
- public int Db_bin_id() {return bin_db_id;} private int bin_db_id;
- public int Mnt_id() {return mnt_id;} private int mnt_id;
- public int Req_w() {return req_w;} private int req_w;
- public double Req_time() {return req_time;} private double req_time;
- public int Req_page() {return req_page;} private int req_page;
- public void Init_by_load(int bin_db_id, int id, int owner_id, int w, double time, int page, int h, long size, String modified, String hash) {
- this.bin_db_id = bin_db_id; this.id = id; this.owner_id = owner_id;
- this.w = w; this.time = time; this.page = page; this.h = h; this.size = size; this.modified = modified; this.hash = hash;
+ public void Ctor(int mnt_id, int dir_id, int fil_id, int thm_id, int bin_db_id, int w, int h, double time, int page, long size, String modified, String hash) {
+ this.mnt_id = mnt_id; this.dir_id = dir_id; this.fil_id = fil_id; this.thm_id = thm_id; this.bin_db_id = bin_db_id;
+ this.w = w; this.h = h; this.time = time; this.page = page;
+ this.size = size; this.modified = modified; this.hash = hash;
}
- public void Init_by_insert(int bin_db_id, int dir_id, int fil_id, int thm_id) {this.bin_db_id = bin_db_id; this.dir_id = dir_id; this.owner_id = fil_id; this.id = thm_id;}
+ public int Mnt_id() {return mnt_id;} private int mnt_id;
+ public int Dir_id() {return dir_id;} private int dir_id;
+ public int Fil_id() {return fil_id;} private int fil_id;
+ public int Thm_id() {return thm_id;} private int thm_id;
+ public int Db_bin_id() {return bin_db_id;} private int bin_db_id;
+ public int W() {return w;} private int w;
+ public int H() {return h;} private int h;
+ public double Time() {return time;} private double time;
+ public int Page() {return page;} private int page;
+ public long Size() {return size;} private long size;
+ public String Modified() {return modified;} private String modified;
+ public String Hash() {return hash;} private String hash;
+ public int Req_w() {return req_w;} private int req_w;
+ public double Req_time() {return req_time;} private double req_time;
+ public int Req_page() {return req_page;} private int req_page;
+
public void Init_by_req(int w, double time, int page) {this.w = w; this.time = time; this.page = page;}
public void Init_by_match(Fsd_thm_itm comp) {
- this.req_w = w;
- this.req_time = time;
- this.req_page = page;
- this.id = comp.id;
- this.owner_id = comp.owner_id;
- this.w = comp.w;
- this.time = comp.time;
- this.page = comp.page;
- this.h = comp.h;
- this.size = comp.size;
- this.modified = comp.modified;
- this.hash = comp.hash;
- this.dir_id = comp.dir_id;
- this.bin_db_id = comp.bin_db_id;
- this.mnt_id = comp.mnt_id;
+ this.req_w = w; this.req_time = time; this.req_page = page;
+ this.mnt_id = comp.mnt_id; this.dir_id = comp.dir_id; this.fil_id = comp.fil_id; this.thm_id = comp.thm_id; this.bin_db_id = comp.bin_db_id;
+ this.w = comp.w; this.h = comp.h; this.time = comp.time; this.page = comp.page;
+ this.size = comp.size; this.modified = comp.modified; this.hash = comp.hash;
}
- public Fsd_thm_itm Mnt_id_(int v) {mnt_id = v; return this;}
- public static final Fsd_thm_itm Null = new Fsd_thm_itm();
+ public static final Fsd_thm_itm Null = null;
public static final Fsd_thm_itm[] Ary_empty = new Fsd_thm_itm[0];
public static Fsd_thm_itm new_() {return new Fsd_thm_itm();} Fsd_thm_itm() {}
}
diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_thm_tbl.java b/400_xowa/src/gplx/fsdb/data/Fsd_thm_tbl.java
index 9a8af737d..f59e9dfc4 100644
--- a/400_xowa/src/gplx/fsdb/data/Fsd_thm_tbl.java
+++ b/400_xowa/src/gplx/fsdb/data/Fsd_thm_tbl.java
@@ -16,129 +16,98 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.fsdb.data; import gplx.*; import gplx.fsdb.*;
-import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.dbs.engines.sqlite.*;
-import gplx.fsdb.meta.*;
-public class Fsd_thm_tbl {
- private String tbl_name = "file_data_thm"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
- 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 schema_is_1, Fsm_atr_fil atr_fil) {
- this.conn = new_conn; flds.Clear(); this.atr_fil = atr_fil;
- String fld_prefix = "";
- if (schema_is_1) {
- tbl_name = "fsdb_xtn_thm";
- fld_prefix = "thm_";
+import gplx.dbs.*; import gplx.fsdb.meta.*; import gplx.xowa.files.*;
+public class Fsd_thm_tbl implements RlsAble {
+ private final String tbl_name; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
+ private final String fld_id, fld_owner_id, fld_w, fld_h, fld_time, fld_page, fld_bin_db_id, fld_size, fld_modified, fld_hash;
+ private final Db_conn conn; private Db_stmt stmt_insert, stmt_select_by_fil_w; private int mnt_id; private boolean schema_thm_page;
+ public Fsd_thm_tbl(Db_conn conn, boolean schema_is_1, int mnt_id, boolean schema_thm_page) {
+ this.conn = conn; this.mnt_id = mnt_id; this.schema_thm_page = schema_thm_page;
+ this.tbl_name = schema_is_1 ? "fsdb_xtn_thm" : "fsdb_thm";
+ this.fld_id = flds.Add_int_pkey ("thm_id");
+ this.fld_owner_id = flds.Add_int ("thm_owner_id");
+ this.fld_w = flds.Add_int ("thm_w");
+ this.fld_h = flds.Add_int ("thm_h");
+ if (schema_thm_page) {
+ this.fld_time = flds.Add_double ("thm_time");
+ this.fld_page = flds.Add_int ("thm_page");
}
- fld_id = flds.Add_int(fld_prefix + "id");
- fld_owner_id = flds.Add_int(fld_prefix + "owner_id");
- fld_w = flds.Add_int(fld_prefix + "w");
- fld_h = flds.Add_int(fld_prefix + "h");
- fld_time = flds.Add_double(fld_prefix + "time");
- fld_page = flds.Add_int(fld_prefix + "page");
- fld_bin_db_id = flds.Add_int(fld_prefix + "bin_db_id");
- fld_size = flds.Add_long(fld_prefix + "size");
- fld_modified = flds.Add_str(fld_prefix + "modified", 14); // stored as yyyyMMddHHmmss
- fld_hash = flds.Add_str(fld_prefix + "hash", 40);
- if (created) {
- Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
- , Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_id)
- , Db_meta_idx.new_unique_by_tbl(tbl_name, "owner", fld_owner_id, fld_id, fld_w, fld_time, fld_page)
- );
- conn.Exec_create_tbl_and_idx(meta);
+ else {
+ this.fld_time = flds.Add_int ("thm_thumbtime");
+ this.fld_page = Db_meta_fld.Key_null;
}
- stmt_insert = stmt_select_by_fil_w = null;
- schema_thm_page_init = true;
+ this.fld_bin_db_id = flds.Add_int ("thm_bin_db_id");
+ this.fld_size = flds.Add_long ("thm_size");
+ this.fld_modified = flds.Add_str ("thm_modified", 14); // stored as yyyyMMddHHmmss
+ this.fld_hash = flds.Add_str ("thm_hash", 40);
+ conn.Rls_reg(this);
}
- private boolean Schema_thm_page() {
- if (schema_thm_page_init) {
- schema_thm_page = atr_fil.Abc_mgr().Cfg_mgr().Schema_thm_page();
- schema_thm_page_init = false;
- if (schema_thm_page) {
- fld_thumbtime = Db_meta_fld.Key_null;
- }
- else {
- fld_time = Db_meta_fld.Key_null;
- fld_page = Db_meta_fld.Key_null;
- }
- }
- return schema_thm_page;
- } private boolean schema_thm_page, schema_thm_page_init = true;
- public void Insert(int id, int thm_owner_id, int width, int height, double thumbtime, int page, int bin_db_id, long size, DateAdp modified, String hash) {
- if (stmt_insert == null) {
- String tmp_fld_time = this.Schema_thm_page() ? fld_time : fld_thumbtime;
- stmt_insert = conn.Rls_reg(conn.Stmt_insert(tbl_name, fld_id, fld_owner_id, fld_w, fld_h, tmp_fld_time, fld_page, fld_bin_db_id, fld_size, fld_modified, fld_hash));
- }
+ public void Rls() {
+ stmt_insert = Db_stmt_.Rls(stmt_insert);
+ stmt_select_by_fil_w = Db_stmt_.Rls(stmt_select_by_fil_w);
+ }
+ public void Create_tbl() {
+ conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds
+ , Db_meta_idx.new_unique_by_tbl(tbl_name, "owner", fld_owner_id, fld_id, fld_w, fld_time, fld_page)
+ ));
+ }
+ public void Insert(int id, int thm_owner_id, int width, int height, double thumbtime, int page, int bin_db_id, long size) {
+ if (stmt_insert == null) stmt_insert = conn.Stmt_insert(tbl_name, flds);
stmt_insert.Clear()
.Val_int(fld_id, id)
.Val_int(fld_owner_id, thm_owner_id)
.Val_int(fld_w, width)
.Val_int(fld_h, height);
- if (this.Schema_thm_page()) {
- stmt_insert.Val_double (fld_time, gplx.xowa.files.Xof_lnki_time.Db_save_double(thumbtime));
- stmt_insert.Val_int (fld_page, gplx.xowa.files.Xof_lnki_page.Db_save_int(page));
+ if (schema_thm_page) {
+ stmt_insert.Val_double (fld_time, Xof_lnki_time.Db_save_double(thumbtime));
+ stmt_insert.Val_int (fld_page, Xof_lnki_page.Db_save_int(page));
}
else
- stmt_insert.Val_int (fld_thumbtime, gplx.xowa.files.Xof_lnki_time.Db_save_int(thumbtime));
+ stmt_insert.Val_int (fld_time, Xof_lnki_time.Db_save_int(thumbtime));
stmt_insert
.Val_int(fld_bin_db_id, bin_db_id)
.Val_long(fld_size, size)
- .Val_str(fld_modified, Sqlite_engine_.X_date_to_str(modified))
- .Val_str(fld_hash, hash)
+ .Val_str(fld_modified, Modified_null_str)
+ .Val_str(fld_hash, Hash_null)
.Exec_insert();
}
- private Db_stmt Select_by_fil_w_stmt() {
- Db_qry__select_cmd qry = Db_qry_.select_().From_(tbl_name).Cols_all_();
- gplx.core.criterias.Criteria crt
- = this.Schema_thm_page()
- ? Db_crt_.eq_many_(fld_owner_id, fld_w, fld_time, fld_page)
- : Db_crt_.eq_many_(fld_owner_id, fld_w, fld_thumbtime)
- ;
- qry.Where_(crt);
- return conn.Stmt_new(qry);
- }
- public boolean Select_itm_by_fil_width(int owner_id, Fsd_thm_itm thm) {
- if (stmt_select_by_fil_w == null) stmt_select_by_fil_w = conn.Rls_reg(Select_by_fil_w_stmt());
- Db_rdr rdr = Db_rdr_.Null;
+ public boolean Select_itm_by_fil_width(int dir_id, int fil_id, Fsd_thm_itm thm) {
+ if (stmt_select_by_fil_w == null) stmt_select_by_fil_w = conn.Stmt_select(tbl_name, flds, String_.Ary_wo_null(fld_owner_id, fld_w, fld_time, fld_page));
+ stmt_select_by_fil_w.Clear().Crt_int(fld_owner_id, fil_id).Crt_int(fld_w, thm.W());
+ if (schema_thm_page) {
+ stmt_select_by_fil_w.Crt_double (fld_time, Xof_lnki_time.Db_save_double(thm.Time()));
+ stmt_select_by_fil_w.Crt_int (fld_page, Xof_lnki_page.Db_save_int(thm.Page()));
+ }
+ else {
+ stmt_select_by_fil_w.Crt_int (fld_time, Xof_lnki_time.Db_save_int(thm.Time()));
+ }
+ Db_rdr rdr = stmt_select_by_fil_w.Exec_select__rls_manual();
try {
- stmt_select_by_fil_w.Clear()
- .Crt_int(fld_owner_id, owner_id)
- .Crt_int(fld_w, thm.W())
- ;
- if (this.Schema_thm_page()) {
- stmt_select_by_fil_w.Crt_double(fld_time, gplx.xowa.files.Xof_lnki_time.Db_save_double(thm.Time()));
- stmt_select_by_fil_w.Crt_int(fld_page, gplx.xowa.files.Xof_lnki_page.Db_save_int(thm.Page()));
- }
- else {
- stmt_select_by_fil_w.Crt_int(fld_time, gplx.xowa.files.Xof_lnki_time.Db_save_int(thm.Time()));
- }
- rdr = stmt_select_by_fil_w.Exec_select_as_rdr();
return rdr.Move_next()
- ? Ctor_by_load(thm, rdr, this.Schema_thm_page())
+ ? Ctor_by_load(thm, rdr, dir_id)
: false;
}
finally {rdr.Rls();}
}
- public boolean Select_itm_by_fil_width2(int owner_id, Fsd_thm_itm thm) {
- if (stmt_select_by_fil_w == null) stmt_select_by_fil_w = conn.Rls_reg(conn.Stmt_select(tbl_name, flds, fld_owner_id));
- Db_rdr rdr = Db_rdr_.Null;
+ public boolean Select_itm_by_fil_width2(int dir_id, int fil_id, Fsd_thm_itm thm) {
+ if (stmt_select_by_fil_w == null) stmt_select_by_fil_w = conn.Stmt_select(tbl_name, flds, fld_owner_id);
+ ListAdp list = ListAdp_.new_();
+ Db_rdr rdr = stmt_select_by_fil_w.Clear().Crt_int(fld_owner_id, thm.Fil_id()).Exec_select__rls_manual();
try {
- ListAdp list = ListAdp_.new_();
- rdr = stmt_select_by_fil_w.Clear().Crt_int(fld_owner_id, thm.Owner_id()).Exec_select_as_rdr();
while (rdr.Move_next()) {
Fsd_thm_itm itm = Fsd_thm_itm.new_();
- Ctor_by_load(itm, rdr, this.Schema_thm_page());
+ Ctor_by_load(itm, rdr, dir_id);
list.Add(itm);
}
return Match_nearest(list, thm, schema_thm_page);
}
finally {rdr.Rls();}
}
- private boolean Ctor_by_load(Fsd_thm_itm itm, Db_rdr rdr, boolean schema_thm_page) {
- int id = rdr.Read_int(fld_id);
- int owner_id = rdr.Read_int(fld_owner_id);
- int width = rdr.Read_int(fld_w);
- int height = rdr.Read_int(fld_h);
+ private boolean Ctor_by_load(Fsd_thm_itm itm, Db_rdr rdr, int dir_id) {
+ int thm_id = rdr.Read_int(fld_id);
+ int fil_id = rdr.Read_int(fld_owner_id);
+ int w = rdr.Read_int(fld_w);
+ int h = rdr.Read_int(fld_h);
long size = rdr.Read_long(fld_size);
String modified = rdr.Read_str(fld_modified);
String hash = rdr.Read_str(fld_hash);
@@ -146,18 +115,18 @@ public class Fsd_thm_tbl {
double time = 0;
int page = 0;
if (schema_thm_page) {
- time = gplx.xowa.files.Xof_lnki_time.Db_load_double(rdr, fld_time);
- page = gplx.xowa.files.Xof_lnki_page.Db_load_int(rdr, fld_page);
+ time = Xof_lnki_time.Db_load_double(rdr, fld_time);
+ page = Xof_lnki_page.Db_load_int(rdr, fld_page);
}
else {
- time = gplx.xowa.files.Xof_lnki_time.Db_load_int(rdr, fld_thumbtime);
- page = gplx.xowa.files.Xof_lnki_page.Null;
+ time = Xof_lnki_time.Db_load_int(rdr, fld_time);
+ page = Xof_lnki_page.Null;
}
- itm.Init_by_load(bin_db_id, id, owner_id, width, time, page, height, size, modified, hash);
+ itm.Ctor(mnt_id, dir_id, fil_id, thm_id, bin_db_id, w, h, time, page, size, modified, hash);
return true;
}
public static final DateAdp Modified_null = null;
- public static final String Hash_null = "";
+ public static final String Hash_null = "", Modified_null_str = "";
public static boolean Match_nearest(ListAdp list, Fsd_thm_itm thm, boolean schema_thm_page) {
int len = list.Count(); if (len == 0) return Bool_.N;
list.SortBy(Fsdb_thm_itm_sorter.I);
diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_abc_mgr.java b/400_xowa/src/gplx/fsdb/meta/Fsm_abc_mgr.java
deleted file mode 100644
index c30ff510a..000000000
--- a/400_xowa/src/gplx/fsdb/meta/Fsm_abc_mgr.java
+++ /dev/null
@@ -1,92 +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 .
-*/
-package gplx.fsdb.meta; import gplx.*; import gplx.fsdb.*;
-import gplx.dbs.*; import gplx.dbs.engines.sqlite.*;
-import gplx.fsdb.data.*;
-public class Fsm_abc_mgr implements RlsAble {
- private Db_conn conn;
- public Fsm_atr_mgr Atr_mgr() {return atr_mgr;} private final Fsm_atr_mgr atr_mgr = new Fsm_atr_mgr();
- public Fsm_bin_mgr Bin_mgr() {return bin_mgr;} private final Fsm_bin_mgr bin_mgr = new Fsm_bin_mgr();
- 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 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, 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
- }
- else {
- if (!cfg_mgr.Patch_next_id()) Fsdb_db_abc_mgr_.Patch_next_id(this, dir);
- }
- }
- public void Fil_insert(Fsd_fil_itm rv , byte[] dir, byte[] fil, int ext_id, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {
- int bin_db_id = bin_mgr.Get_id_for_insert(bin_len);
- int fil_id = atr_mgr.Fil_insert(rv, dir, fil, ext_id, modified, hash, bin_db_id, bin_len, bin_rdr);
- bin_len = bin_mgr.Insert(bin_db_id, fil_id, Fsd_bin_tbl.Owner_tid_fil, bin_len, bin_rdr);
- bin_mgr.Increment(bin_len);
- }
- public void Thm_insert(Fsd_thm_itm rv, byte[] dir, byte[] fil, int ext_id, int w, int h, double thumbtime, int page, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {
- int bin_db_id = bin_mgr.Get_id_for_insert(bin_len);
- int thm_id = atr_mgr.Thm_insert(rv, dir, fil, ext_id, w, h, thumbtime, page, modified, hash, bin_db_id, bin_len, bin_rdr);
- bin_len = bin_mgr.Insert(bin_db_id, thm_id, Fsd_bin_tbl.Owner_tid_thm, bin_len, bin_rdr);
- bin_mgr.Increment(bin_len);
- }
- public void Img_insert(Fsd_img_itm rv, byte[] dir, byte[] fil, int ext_id, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr, int img_w, int img_h) {
- int bin_db_id = bin_mgr.Get_id_for_insert(bin_len);
- rv.Db_bin_id_(bin_db_id);
- int fil_id = atr_mgr.Img_insert(rv, String_.new_utf8_(dir), String_.new_utf8_(fil), ext_id, img_w, img_h, modified, hash, bin_db_id, bin_len, bin_rdr);
- bin_len = bin_mgr.Insert(bin_db_id, fil_id, Fsd_bin_tbl.Owner_tid_fil, bin_len, bin_rdr);
- bin_mgr.Increment(bin_len);
- }
- public boolean Thm_select_bin(byte[] dir, byte[] fil, Fsd_thm_itm thm) {
- Fsd_fil_itm fil_itm = atr_mgr.Fil_select(dir, fil);
- return atr_mgr.Thm_select(fil_itm.Id(), thm);
- }
- public Fsd_fil_itm Fil_select_bin(byte[] dir, byte[] fil, boolean is_thumb, int width, double thumbtime) {
- return atr_mgr.Fil_select(dir, fil);
- }
- public void Txn_open() {
- conn.Txn_mgr().Txn_bgn_if_none();
- atr_mgr.Txn_open();
- bin_mgr.Txn_open();
- }
- public void Txn_save() {atr_mgr.Txn_save(); bin_mgr.Txn_save(); cfg_mgr.Txn_save();}
- public void Rls() {atr_mgr.Rls(); bin_mgr.Rls(); cfg_mgr.Rls(); conn.Conn_term();}
- public static final String Cfg_tbl_v1 = "fsdb_cfg", Cfg_tbl_v2 = "file_meta_cfg";
-}
-class Fsdb_db_abc_mgr_ {
- public static void Patch_next_id(Fsm_abc_mgr abc_mgr, Io_url dir) {
- if (!String_.Eq(dir.NameOnly(), "fsdb.user")) return;
- Fsm_atr_mgr atr_mgr = abc_mgr.Atr_mgr();
- Fsm_cfg_mgr cfg_mgr = abc_mgr.Cfg_mgr();
- int last_id = -1;
- if (atr_mgr.Len() > 0) {
- Fsm_atr_fil atr_fil = atr_mgr.Get_at(0);
- int max_fil_id = Db_conn_.Select_fld0_as_int_or(atr_fil.Conn(), "SELECT Max(fil_id) AS MaxId FROM fsdb_fil;", -1);
- int max_thm_id = Db_conn_.Select_fld0_as_int_or(atr_fil.Conn(), "SELECT Max(thm_id) AS MaxId FROM fsdb_xtn_thm;", -1);
- last_id = max_fil_id > max_thm_id ? max_fil_id : max_thm_id;
- }
- cfg_mgr.Patch_next_id_exec(last_id);
- }
-}
diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_atr_fil.java b/400_xowa/src/gplx/fsdb/meta/Fsm_atr_fil.java
index cdff87c58..921677432 100644
--- a/400_xowa/src/gplx/fsdb/meta/Fsm_atr_fil.java
+++ b/400_xowa/src/gplx/fsdb/meta/Fsm_atr_fil.java
@@ -16,125 +16,94 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.fsdb.meta; import gplx.*; import gplx.fsdb.*;
-import gplx.core.primitives.*; import gplx.cache.*;
-import gplx.dbs.*; import gplx.dbs.engines.sqlite.*;
-import gplx.fsdb.data.*;
-public class Fsm_atr_fil implements RlsAble {
- private Gfo_cache_mgr_bry dir_cache = new Gfo_cache_mgr_bry();
- private final Fsd_dir_tbl tbl_dir = new Fsd_dir_tbl(); private final Fsd_fil_tbl tbl_fil = new Fsd_fil_tbl(); private Fsd_thm_tbl tbl_thm = new Fsd_thm_tbl();
- private static final String Db_conn_bldr_type = "gplx.fsdb.fsm_atr_fil";
- public Fsm_atr_fil(Fsm_abc_mgr abc_mgr, Io_url io_url) {
- 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 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);
+import gplx.core.primitives.*; import gplx.cache.*; import gplx.ios.*;
+import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.fsdb.data.*;
+public class Fsm_atr_fil {
+ private final Fsm_mnt_itm mnt_itm; private final int mnt_id;
+ private Fsd_dir_tbl tbl_dir; private Fsd_fil_tbl tbl_fil; private Fsd_thm_tbl tbl_thm;
+ private final Gfo_cache_mgr_bry dir_cache = new Gfo_cache_mgr_bry(); private Gfo_cache_mgr_bry fil_cache; private Bry_bfr fil_cache_key_bfr;
+ public Fsm_atr_fil(Fsm_mnt_itm mnt_itm, int id, String url_rel, Db_conn conn, boolean schema_is_1, boolean schema_thm_page) {
+ this.mnt_itm = mnt_itm; this.mnt_id = mnt_itm.Id();
+ this.id = id; this.url_rel = url_rel; this.conn = conn;
+ this.tbl_dir = new Fsd_dir_tbl(conn, schema_is_1);
+ this.tbl_fil = new Fsd_fil_tbl(conn, schema_is_1, mnt_id);
+ this.tbl_thm = new Fsd_thm_tbl(conn, schema_is_1, mnt_id, schema_thm_page);
}
- 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;
- public int Id() {return id;} private int id;
- public Io_url Url() {return url;} private Io_url url;
- public String Path_bgn() {return path_bgn;} private String path_bgn;
- public byte Cmd_mode() {return cmd_mode;} public Fsm_atr_fil Cmd_mode_(byte v) {cmd_mode = v; return this;} private byte cmd_mode;
- public void Ctor_by_load(int id, Io_url url, String path_bgn, byte cmd_mode) {
- this.id = id;
- this.url = url;
- this.path_bgn = path_bgn;
- this.cmd_mode = cmd_mode;
+ public int Id() {return id;} private final int id;
+ public String Url_rel() {return url_rel;} private final String url_rel;
+ public Db_conn Conn() {return conn;} private final Db_conn conn;
+ public Fsd_fil_itm Select_fil_or_null(byte[] dir, byte[] fil) {
+ int dir_id = Get_dir_id_or_neg1(dir);
+ return dir_id == Int_.Neg1 ? Fsd_fil_itm.Null : tbl_fil.Select_or_null(dir_id, fil);
}
- public void Rls() {
- conn.Txn_mgr().Txn_end_all();
- conn.Conn_term();
- }
- public void Txn_open() {
- conn.Txn_mgr().Txn_bgn_if_none();
- }
- public void Txn_save() {
- conn.Txn_mgr().Txn_end_all();
- }
- public Fsd_fil_itm Fil_select(byte[] dir, byte[] fil) {
- Int_obj_ref dir_id_obj = (Int_obj_ref)dir_cache.Get_or_null(dir);
- int dir_id = -1;
- if (dir_id_obj == null) {
- Fsd_dir_itm dir_itm = tbl_dir.Select_itm(String_.new_utf8_(dir));
- dir_id = dir_itm == Fsd_dir_itm.Null ? -1 : dir_itm.Id();
- dir_cache.Add(dir, Int_obj_ref.new_(dir_id));
- }
- else
- dir_id = dir_id_obj.Val();
- if (dir_id == Int_.Neg1) return Fsd_fil_itm.Null;
- return tbl_fil.Select_itm_by_name(dir_id, String_.new_utf8_(fil));
- }
- public boolean Thm_select(int owner_id, Fsd_thm_itm thm) {
- return tbl_thm.Select_itm_by_fil_width(owner_id, thm);
- }
- public int Fil_insert(Fsd_fil_itm rv, String dir, String fil, int ext_id, DateAdp modified, String hash, int bin_db_id, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {
- int dir_id = Dir_id__get_or_insert(dir);
- int fil_id = Fil_id__get_or_insert(Xtn_tid_none, dir_id, fil, ext_id, modified, hash, bin_db_id, bin_len);
- rv.Init_for_insert(bin_db_id, dir_id, fil_id);
+ public boolean Select_thm(Fsd_thm_itm rv, int dir_id, int fil_id) {return tbl_thm.Select_itm_by_fil_width(dir_id, fil_id, rv);}
+ public int Insert_fil(Fsd_fil_itm rv, byte[] dir, byte[] fil, int ext_id, int bin_db_id, long bin_len, Io_stream_rdr bin_rdr) {
+ int dir_id = Get_dir_id_or_make(dir);
+ int fil_id = Get_fil_id_or_make(Tid_none, dir_id, fil, ext_id, bin_db_id, bin_len);
+ rv.Ctor(mnt_id, fil_id, dir_id, bin_db_id, fil, ext_id);
return fil_id;
}
- public int Img_insert(Fsd_img_itm rv, String dir, String fil, int ext_id, int img_w, int img_h, DateAdp modified, String hash, int bin_db_id, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {
- int dir_id = Dir_id__get_or_insert(dir);
- int fil_id = Fil_id__get_or_insert(Xtn_tid_img, dir_id, fil, ext_id, modified, hash, bin_db_id, bin_len);
- rv.Id_(fil_id);
+ public int Insert_img(Fsd_img_itm rv, byte[] dir, byte[] fil, int ext_id, int img_w, int img_h, int bin_db_id, long bin_len, Io_stream_rdr bin_rdr) {
+ int dir_id = Get_dir_id_or_make(dir);
+ int fil_id = Get_fil_id_or_make(Tid_img, dir_id, fil, ext_id, bin_db_id, bin_len);
+ rv.Ctor(mnt_id, dir_id, fil_id, bin_db_id);
return fil_id;
}
- public int Thm_insert(Fsd_thm_itm rv, String dir, String fil, int ext_id, int thm_w, int thm_h, double thumbtime, int page, DateAdp modified, String hash, int bin_db_id, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {
- int dir_id = Dir_id__get_or_insert(dir);
- int fil_id = Fil_id__get_or_insert(Xtn_tid_thm, dir_id, fil, ext_id, modified, hash, Fsd_bin_tbl.Null_db_bin_id, Fsd_bin_tbl.Null_size); // NOTE: bin_db_id must be set to NULL
- int thm_id = abc_mgr.Next_id();
- tbl_thm.Insert(thm_id, fil_id, thm_w, thm_h, thumbtime, page, bin_db_id, bin_len, modified, hash);
- rv.Init_by_insert(bin_db_id, dir_id, fil_id, thm_id);
+ public int Insert_thm(Fsd_thm_itm rv, byte[] dir, byte[] fil, int ext_id, int w, int h, double time, int page, int bin_db_id, long bin_len, Io_stream_rdr bin_rdr) {
+ int dir_id = Get_dir_id_or_make(dir);
+ int fil_id = Get_fil_id_or_make(Tid_thm, dir_id, fil, ext_id, Fsd_bin_tbl.Bin_db_id_null, Fsd_bin_tbl.Size_null); // NOTE: bin_db_id must be set to NULL
+ int thm_id = mnt_itm.Next_id();
+ tbl_thm.Insert(thm_id, fil_id, w, h, time, page, bin_db_id, bin_len);
+ rv.Ctor(mnt_id, dir_id, fil_id, thm_id, bin_db_id, w, h, time, page, bin_len, Fsd_thm_tbl.Modified_null_str, Fsd_thm_tbl.Hash_null);
return thm_id;
}
- public static Fsm_atr_fil make_(Fsm_abc_mgr abc_mgr, int id, Io_url url, String path_bgn) {
- Fsm_atr_fil rv = new Fsm_atr_fil(abc_mgr, url);
- rv.id = id;
- rv.url = url;
- rv.path_bgn = path_bgn;
- rv.cmd_mode = Db_cmd_mode.Tid_create;
- return rv;
+ public void Fil_cache_enabled_y_() {
+ fil_cache = new Gfo_cache_mgr_bry();
+ fil_cache_key_bfr = Bry_bfr.reset_(255);
+ tbl_fil.Select_all(fil_cache_key_bfr, fil_cache);
}
- private int Dir_id__get_or_insert(String dir_str) {
- byte[] dir_bry = Bry_.new_utf8_(dir_str);
+ private int Get_dir_id_or_neg1(byte[] dir_bry) {
Object rv_obj = dir_cache.Get_or_null(dir_bry);
- int rv = -1;
- if (rv_obj != null) { // item found
- rv = ((Int_obj_ref)rv_obj).Val();
- if (rv == -1) // dir was previously -1; occurs when doing select on empty db (no dir, so -1 added) and then doing insert (-1 now needs to be dropped)
- dir_cache.Del(dir_bry);
+ if (rv_obj == null) { // not in mem
+ Fsd_dir_itm itm = tbl_dir.Select_or_null(dir_bry); // try db
+ if (itm == Fsd_dir_itm.Null) return -1; // not in db
+ int dir_id = itm.Dir_id();
+ dir_cache.Add(dir_bry, Int_obj_ref.new_(dir_id)); // add to mem
+ return dir_id;
}
+ else
+ return ((Int_obj_ref)rv_obj).Val();
+ }
+ private int Get_dir_id_or_make(byte[] dir_bry) {
+ int rv = Get_dir_id_or_neg1(dir_bry);
if (rv == -1) {
- Fsd_dir_itm itm = tbl_dir.Select_itm(dir_str);
- if (itm == Fsd_dir_itm.Null) {
- rv = abc_mgr.Next_id();
- tbl_dir.Insert(rv, dir_str, 0); // 0: always assume root owner
- }
- else {
- rv = itm.Id();
- }
+ rv = mnt_itm.Next_id();
+ tbl_dir.Insert(rv, dir_bry, Fsd_dir_itm.Owner_root);
dir_cache.Add(dir_bry, Int_obj_ref.new_(rv));
}
return rv;
}
- private int Fil_id__get_or_insert(int xtn_tid, int dir_id, String fil, int ext_id, DateAdp modified, String hash, int bin_db_id, long bin_len) {
- Fsd_fil_itm fil_itm = tbl_fil.Select_itm_by_name(dir_id, fil);
- int fil_id = fil_itm.Id();
- if (fil_id == Fsd_fil_itm.Null_id) { // new item
- fil_id = abc_mgr.Next_id();
- tbl_fil.Insert(fil_id, dir_id, fil, xtn_tid, ext_id, bin_len, modified, hash, bin_db_id);
+ private int Get_fil_id_or_make(int xtn_tid, int dir_id, byte[] fil, int ext_id, int bin_db_id, long bin_len) {
+ if (fil_cache != null) {
+ byte[] cache_key = Fsd_fil_itm.Gen_cache_key(fil_cache_key_bfr, dir_id, fil);
+ Object cache_obj = fil_cache.Get_or_null(cache_key);
+ if (cache_obj != null) return ((Fsd_fil_itm)cache_obj).Fil_id();
}
- else { // existing item
- if ( fil_itm.Db_bin_id() == Fsd_bin_tbl.Null_db_bin_id // prv row was previously inserted by thumb
- && xtn_tid != Xtn_tid_thm // cur row is not thumb
+ Fsd_fil_itm fil_itm = tbl_fil.Select_or_null(dir_id, fil);
+ int fil_id = -1;
+ if (fil_itm == Fsd_fil_itm.Null) { // new item
+ fil_id = mnt_itm.Next_id();
+ tbl_fil.Insert(fil_id, dir_id, fil, xtn_tid, ext_id, bin_len, bin_db_id);
+ }
+ else { // existing item
+ fil_id = fil_itm.Fil_id();
+ if ( fil_itm.Bin_db_id() == Fsd_bin_tbl.Bin_db_id_null // prv row was previously inserted by thumb
+ && xtn_tid != Tid_thm // cur row is not thumb
) {
- tbl_fil.Update(fil_id, dir_id, fil, xtn_tid, ext_id, bin_len, modified, hash, bin_db_id); // update props; note that thumb inserts null props, whereas file will insert real props (EX: bin_db_id)
+ tbl_fil.Update(fil_id, dir_id, fil, xtn_tid, ext_id, bin_len, bin_db_id); // update props; note that thumb inserts null props, whereas file will insert real props (EX: bin_db_id)
}
}
return fil_id;
}
- private static final int Xtn_tid_none = 0, Xtn_tid_thm = 1, Xtn_tid_img = 2;
+ private static final int Tid_none = 0, Tid_thm = 1, Tid_img = 2;
}
diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_atr_mgr.java b/400_xowa/src/gplx/fsdb/meta/Fsm_atr_mgr.java
index 7025eea49..85ef8b17b 100644
--- a/400_xowa/src/gplx/fsdb/meta/Fsm_atr_mgr.java
+++ b/400_xowa/src/gplx/fsdb/meta/Fsm_atr_mgr.java
@@ -16,61 +16,19 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.fsdb.meta; import gplx.*; import gplx.fsdb.*;
-import gplx.dbs.*; import gplx.cache.*;
-import gplx.fsdb.data.*;
-public class Fsm_atr_mgr implements RlsAble {
- private Fsm_atr_tbl tbl = new Fsm_atr_tbl();
- private Fsm_atr_fil[] itms; private Fsm_atr_fil itms_0;
- public int Len() {return itms.length;}
- public Fsm_atr_fil Get_at(int i) {return i == Id_0 ? itms_0 : itms[i];}
- public Fsd_fil_itm Fil_select(byte[] dir, byte[] fil) {return itms_0.Fil_select(dir, fil);}
- public boolean Thm_select(int owner_id, Fsd_thm_itm thm) {return itms_0.Thm_select(owner_id, thm);}
- public int Fil_insert(Fsd_fil_itm rv , byte[] dir, byte[] fil, int ext_id, DateAdp modified, String hash, int bin_db_id, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {
- return itms_0.Fil_insert(rv, String_.new_utf8_(dir), String_.new_utf8_(fil), ext_id, modified, hash, bin_db_id, bin_len, bin_rdr);
+import gplx.dbs.*; import gplx.fsdb.data.*;
+public class Fsm_atr_mgr {
+ private Fsdb_db_mgr core_mgr; private Fsm_atr_tbl tbl; private Fsm_atr_fil db__core; private Fsm_mnt_itm mnt_itm;
+ public Fsm_atr_mgr(Fsdb_db_mgr core_mgr, Db_conn conn, Fsm_mnt_itm mnt_itm) {
+ this.core_mgr = core_mgr; this.mnt_itm = mnt_itm;
+ this.tbl = new Fsm_atr_tbl(conn, core_mgr.File__schema_is_1());
}
- public int Img_insert(Fsd_img_itm rv, String dir, String fil, int ext_id, int img_w, int img_h, DateAdp modified, String hash, int bin_db_id, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {
- return itms_0.Img_insert(rv, dir, fil, ext_id, img_w, img_h, modified, hash, bin_db_id, bin_len, bin_rdr);
+ public void Ctor_by_load(boolean schema_thm_page) {
+ this.db__core = tbl.Select_1st_or_fail(mnt_itm, core_mgr, mnt_itm.Id(), schema_thm_page);
}
- public int Thm_insert(Fsd_thm_itm rv, byte[] dir, byte[] fil, int ext_id, int width, int height, double thumbtime, int page, DateAdp modified, String hash, int bin_db_id, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {
- return itms_0.Thm_insert(rv, String_.new_utf8_(dir), String_.new_utf8_(fil), ext_id, width, height, thumbtime, page, modified, hash, bin_db_id, bin_len, bin_rdr);
- }
- public void Txn_open() {
- int len = itms.length;
- for (int i = 0; i < len; i++) {
- Fsm_atr_fil itm = itms[i];
- itm.Txn_open();
- }
- }
- public void Txn_save() {
- tbl.Commit_all(itms);
- int len = itms.length;
- for (int i = 0; i < len; i++) {
- Fsm_atr_fil itm = itms[i];
- itm.Txn_save();
- }
- }
- public void Rls() {
- int len = itms.length;
- for (int i = 0; i < len; i++) {
- Fsm_atr_fil itm = itms[i];
- itm.Rls();
- }
- }
- 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};
- this.itms_0 = itm;
- }
- else {
- this.itms = tbl.Select_all(abc_mgr, dir);
- this.itms_0 = this.itms[0];
- }
- }
- private static Io_url url_(Io_url dir, int id) {
- return dir.GenSubFil_ary("fsdb.atr.", Int_.Xto_str_pad_bgn(id, 2), ".sqlite3");
- }
- public static final int Id_0 = 0;
- public static final String Path_bgn_0 = "";
+ public Fsm_atr_fil Db__core() {return db__core;}
+ public Fsd_fil_itm Select_fil_or_null(byte[] dir, byte[] fil) {return db__core.Select_fil_or_null(dir, fil);}
+ public boolean Select_thm(Fsd_thm_itm rv, int dir_id, int fil_id) {return db__core.Select_thm(rv, dir_id, fil_id);}
+ public void Txn_bgn() {db__core.Conn().Txn_bgn();}
+ public void Txn_end() {db__core.Conn().Txn_end();}
}
diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_atr_tbl.java b/400_xowa/src/gplx/fsdb/meta/Fsm_atr_tbl.java
index 9b19ec4bb..fa7cddcc6 100644
--- a/400_xowa/src/gplx/fsdb/meta/Fsm_atr_tbl.java
+++ b/400_xowa/src/gplx/fsdb/meta/Fsm_atr_tbl.java
@@ -18,62 +18,38 @@ along with this program. If not, see .
package gplx.fsdb.meta; import gplx.*; import gplx.fsdb.*;
import gplx.dbs.*; import gplx.dbs.qrys.*;
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 schema_is_1) {
- this.conn = new_conn; flds.Clear();
- if (schema_is_1) {
- tbl_name = "fsdb_db_atr";
- }
- fld_uid = flds.Add_int("uid");
- fld_url = flds.Add_str("url", 255);
- fld_path_bgn = flds.Add_str("path_bgn", 255);
- if (created) {
- Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
- , Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_uid)
- );
- conn.Exec_create_tbl_and_idx(meta);
- }
- stmt_bldr.Conn_(conn, tbl_name, flds, fld_uid);
+ private final String tbl_name; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
+ private final String fld_uid, fld_url;
+ private final Db_conn conn;
+ public Fsm_atr_tbl(Db_conn conn, boolean schema_is_1) {
+ this.conn = conn;
+ String fld_prefix = "";
+ if (schema_is_1) {tbl_name = "fsdb_db_atr";}
+ else {tbl_name = "fsdb_dba"; fld_prefix = "dba_";}
+ this.fld_uid = flds.Add_int_pkey (fld_prefix + "uid");
+ this.fld_url = flds.Add_str (fld_prefix + "url", 255);
}
- public Fsm_atr_fil[] Select_all(Fsm_abc_mgr abc_mgr, Io_url dir) {
- ListAdp rv = ListAdp_.new_();
- Db_rdr rdr = Db_rdr_.Null;
+ public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds));}
+ public Fsm_atr_fil Select_1st_or_fail(Fsm_mnt_itm mnt_itm, Fsdb_db_mgr core_mgr, int mnt_id, boolean schema_thm_page) {
+ Db_rdr rdr = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empy).Exec_select__rls_auto();
+ boolean schema_is_1 = core_mgr.File__schema_is_1();
try {
- rdr = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empy).Exec_select_as_rdr();
- while (rdr.Move_next()) {
- Io_url url = dir.GenSubFil(rdr.Read_str(fld_url));
- Fsm_atr_fil itm = new Fsm_atr_fil(abc_mgr, url);
- itm.Ctor_by_load
- ( rdr.Read_int(fld_uid)
- , url
- , rdr.Read_str(fld_path_bgn)
- , Db_cmd_mode.Tid_ignore
+ if (rdr.Move_next()) {
+ String url_rel = rdr.Read_str(fld_url);
+ return new Fsm_atr_fil
+ ( mnt_itm
+ , rdr.Read_int(fld_uid)
+ , url_rel
+ , core_mgr.File__atr_file__at(mnt_id).Conn()
+ , schema_is_1
+ , schema_thm_page
);
- rv.Add(itm);
}
}
finally {rdr.Rls();}
- return (Fsm_atr_fil[])rv.Xto_ary(Fsm_atr_fil.class);
+ throw Err_.new_("missing atr db; conn_info={0}", conn.Conn_info().Xto_api());
}
- public void Commit_all(Fsm_atr_fil[] ary) {
- stmt_bldr.Batch_bgn();
- try {
- int len = ary.length;
- for (int i = 0; i < len; i++)
- Commit_itm(ary[i]);
- } finally {stmt_bldr.Batch_end();}
- }
- private void Commit_itm(Fsm_atr_fil 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_uid, itm.Id()) .Val_str(fld_url, itm.Url().NameAndExt()).Val_str(fld_path_bgn, itm.Path_bgn()).Exec_insert(); break;
- case Db_cmd_mode.Tid_update: stmt.Clear() .Val_str(fld_url, itm.Url().NameAndExt()).Val_str(fld_path_bgn, itm.Path_bgn()).Crt_int(fld_uid, itm.Id()).Exec_update(); break;
- case Db_cmd_mode.Tid_delete: stmt.Clear().Crt_int(fld_uid, itm.Id()).Exec_delete(); break;
- case Db_cmd_mode.Tid_ignore: break;
- default: throw Err_.unhandled(itm.Cmd_mode());
- }
- itm.Cmd_mode_(Db_cmd_mode.Tid_ignore);
+ public void Insert(int id, String url_rel) {
+ conn.Stmt_insert(tbl_name, flds).Val_int(fld_uid, id).Val_str(fld_url, url_rel).Exec_insert();
}
}
diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_bin_fil.java b/400_xowa/src/gplx/fsdb/meta/Fsm_bin_fil.java
index 1766e66f4..04ccb5fb1 100644
--- a/400_xowa/src/gplx/fsdb/meta/Fsm_bin_fil.java
+++ b/400_xowa/src/gplx/fsdb/meta/Fsm_bin_fil.java
@@ -16,43 +16,24 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.fsdb.meta; import gplx.*; import gplx.fsdb.*;
-import gplx.ios.*; import gplx.dbs.*; import gplx.dbs.engines.sqlite.*;
+import gplx.ios.*; import gplx.dbs.*;
import gplx.fsdb.data.*;
-public class Fsm_bin_fil implements RlsAble {
- public Fsm_bin_fil(int id, Io_url url, long bin_len, long bin_max, byte cmd_mode) {
- this.id = id; this.url = url; this.bin_len = bin_len; this.bin_max = bin_max; this.cmd_mode = cmd_mode;
+public class Fsm_bin_fil {
+ private final Fsd_bin_tbl tbl;
+ public Fsm_bin_fil(int id, String url_rel, long bin_len, Db_conn conn, boolean schema_is_1) {
+ this.id = id; this.url_rel = url_rel; this.bin_len = bin_len; this.conn = conn;
+ this.tbl = new Fsd_bin_tbl(conn, schema_is_1);
}
- public int Id() {return id;} private final int id;
- public Io_url Url() {return url;} private final Io_url url;
- public long Bin_max() {return bin_max;} private long bin_max;
- public void Bin_max_(long v) {
- bin_max = v;
- if (cmd_mode == Db_cmd_mode.Tid_ignore) cmd_mode = Db_cmd_mode.Tid_update;
+ public int Id() {return id;} private final int id;
+ public String Url_rel() {return url_rel;} private final String url_rel;
+ public long Bin_len() {return bin_len;} private void Bin_len_(long v) {bin_len = v;} private long bin_len;
+ public Db_conn Conn() {return conn;} private final Db_conn conn;
+ public boolean Select_to_url(int id, Io_url url) {return tbl.Select_to_url(id, url);}
+ public Io_stream_rdr Select_as_rdr(int id) {return tbl.Select_as_rdr(id);}
+ public void Insert(int bin_id, byte owner_tid, long rdr_len, gplx.ios.Io_stream_rdr rdr) {
+ tbl.Insert_rdr(bin_id, owner_tid, rdr_len, rdr);
+ Bin_len_(bin_len + rdr_len);
}
- public long Bin_len() {return bin_len;} private long bin_len;
- public void Bin_len_(long v) {
- bin_len = v;
- if (cmd_mode == Db_cmd_mode.Tid_ignore) cmd_mode = Db_cmd_mode.Tid_update;
- }
- public byte Cmd_mode() {return cmd_mode;} public Fsm_bin_fil Cmd_mode_(byte v) {cmd_mode = v; return this;} private byte cmd_mode;
public static final Fsm_bin_fil[] Ary_empty = new Fsm_bin_fil[0];
- private Fsd_bin_tbl bin_tbl = new Fsd_bin_tbl(); private Db_conn conn;
- public static Fsm_bin_fil make_(int id, Io_url url, long bin_len, long bin_max) {
- Fsm_bin_fil rv = new Fsm_bin_fil(id, url, bin_len, bin_max, Db_cmd_mode.Tid_create);
- rv.Conn(); // force table create
- return rv;
- }
- private static final String Db_conn_bldr_type = "gplx.fsdb.fsm_bin";
- public Db_conn Conn() {
- if (conn == null) {
- Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new(Db_conn_bldr_type, url);
- conn = conn_data.Conn();
- bin_tbl.Conn_(conn, conn_data.Created(), Bool_.Y);
- }
- return conn;
- }
- public long Insert(int bin_id, byte owner_tid, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {this.Conn(); return bin_tbl.Insert_rdr(bin_id, owner_tid, bin_len, bin_rdr);}
- public boolean Get_to_url(int id, Io_url url) {this.Conn(); return bin_tbl.Select_to_url(id, url);}
- public Io_stream_rdr Get_as_rdr(int id) {return bin_tbl.Select_as_rdr(this.Conn(), id);}
- public void Rls() {if (conn != null) conn.Conn_term();}
+ public static final long Bin_len_null = 0;
}
diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_bin_mgr.java b/400_xowa/src/gplx/fsdb/meta/Fsm_bin_mgr.java
index 31717bc6d..f84ba2219 100644
--- a/400_xowa/src/gplx/fsdb/meta/Fsm_bin_mgr.java
+++ b/400_xowa/src/gplx/fsdb/meta/Fsm_bin_mgr.java
@@ -16,79 +16,44 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.fsdb.meta; import gplx.*; import gplx.fsdb.*;
-import gplx.dbs.*;
-public class Fsm_bin_mgr implements RlsAble {
- private Io_url dir;
- private final Fsm_bin_tbl tbl = new Fsm_bin_tbl();
- private Fsm_bin_fil[] fil_ary = Fsm_bin_fil.Ary_empty; private int fil_ary_len = 0;
- private Fsm_bin_fil fil_cur;
- public int Len() {return fil_ary.length;}
- public long Db_bin_max() {return db_bin_max;}
- public int Insert_to_bin() {return insert_to_bin;} public Fsm_bin_mgr Insert_to_bin_(int v) {insert_to_bin = v; return this;} private int insert_to_bin = Fsm_mnt_mgr.Insert_to_bin_null;
- public Fsm_bin_mgr Db_bin_max_(long v) {
- db_bin_max = v;
- for (int i = 0; i < fil_ary_len; i++)
- fil_ary[i].Bin_max_(v);
- return this;
- } private long db_bin_max = Io_mgr.Len_mb * Long_.Xby_int(188);
- public Fsm_bin_fil Get_at(int i) {return fil_ary[i];}
- private Fsm_bin_fil Get_cur() {return fil_ary_len == 0 ? null : fil_ary[fil_ary_len - 1];}
- public void Txn_open() {
- Get_cur().Conn().Txn_mgr().Txn_bgn_if_none();
+import gplx.ios.*; import gplx.dbs.*;
+public class Fsm_bin_mgr {
+ private final Fsdb_db_mgr core_mgr; private final int mnt_id; private final Fsm_bin_tbl tbl;
+ private Fsm_bin_fil[] dbs__ary = Fsm_bin_fil.Ary_empty; private int dbs__ary_len = 0; private Fsm_bin_fil nth_db;
+ public Fsm_bin_mgr(Fsdb_db_mgr core_mgr, Db_conn conn, int mnt_id) {
+ this.core_mgr = core_mgr; this.mnt_id = mnt_id;
+ this.tbl = new Fsm_bin_tbl(conn, core_mgr.File__schema_is_1(), mnt_id);
}
- public void Txn_save() {
- tbl.Commit_all(fil_ary);
- Get_cur().Conn().Txn_mgr().Txn_end_all();
+ public void Ctor_by_load() {
+ this.dbs__ary = tbl.Select_all(core_mgr);
+ this.dbs__ary_len = dbs__ary.length;
+ if (dbs__ary_len > 0) this.nth_db = dbs__ary[dbs__ary_len - 1];
}
- public void Rls() {
- int len = fil_ary.length;
- for (int i = 0; i < len; i++) {
- Fsm_bin_fil itm = fil_ary[i];
- itm.Rls();
- }
+ public Fsm_bin_fil Dbs__get_nth() {return nth_db;}
+ public Fsm_bin_fil Dbs__get_at(int i) {return dbs__ary[i];}
+ public Fsm_bin_fil Dbs__make(String file_name) {
+ Fsdb_db_file db = core_mgr.File__bin_file__new(mnt_id, file_name);
+ Fsm_bin_fil rv = new Fsm_bin_fil(dbs__ary_len, db.Url().NameAndExt(), Fsm_bin_fil.Bin_len_null, db.Conn(), core_mgr.File__schema_is_1());
+ tbl.Insert(rv.Id(), rv.Url_rel());
+ Dbs__add(rv);
+ return rv;
}
- public int Get_id_for_insert(long bin_len) {
- if (insert_to_bin != Fsm_mnt_mgr.Insert_to_bin_null) return insert_to_bin; // insert_to_bin specified; return it
- if (fil_cur.Bin_len() > fil_cur.Bin_max())
- Itms_add(0);
- return fil_cur.Id();
+ public void Insert(int db_id, int bin_id, byte owner_tid, long bin_len, Io_stream_rdr bin_rdr) {
+ Fsm_bin_fil fil = dbs__ary[db_id];
+ fil.Insert(bin_id, owner_tid, bin_len, bin_rdr);
+ dbs__ary[db_id].Insert(bin_id, owner_tid, bin_len, bin_rdr);
}
- public void Increment(long bin_len) {
- long new_bin_len = fil_cur.Bin_len() + bin_len;
- fil_cur.Bin_len_(new_bin_len);
+ public void Txn_bgn() {
+ for (int i = 0; i < dbs__ary_len; ++i)
+ dbs__ary[i].Conn().Txn_bgn();
}
- public long Insert(int db_id, int bin_id, byte owner_tid, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {
- Fsm_bin_fil bin_fil = fil_ary[db_id];
- return bin_fil.Insert(bin_id, owner_tid, bin_len, bin_rdr);
+ public void Txn_end() {
+ for (int i = 0; i < dbs__ary_len; ++i)
+ dbs__ary[i].Conn().Txn_end();
}
- public void Init_for_db(Db_conn conn, boolean created, boolean schema_is_1, Io_url dir) {
- this.dir = dir;
- tbl.Conn_(conn, created, schema_is_1);
- if (created)
- this.Itms_add(0);
- else {
- fil_ary = tbl.Select_all(dir);
- fil_ary_len = this.fil_ary.length;
- fil_cur = this.fil_ary[fil_ary_len - 1];
- }
- }
- private void Itms_add(long bin_len) {
- Fsm_bin_fil cur = Get_cur();
- if (cur != null) {
- cur.Conn().Txn_mgr().Txn_end_all();
- cur.Conn().Conn_term();
- }
- int new_itms_len = fil_ary_len + 1;
- Fsm_bin_fil[] new_itms = new Fsm_bin_fil[new_itms_len];
- for (int i = 0; i < fil_ary_len; i++)
- new_itms[i] = fil_ary[i];
- fil_cur = Fsm_bin_fil.make_(fil_ary_len, url_(dir, fil_ary_len), bin_len, db_bin_max);
- fil_ary = new_itms;
- fil_ary_len = new_itms_len;
- fil_ary[fil_ary_len - 1] = fil_cur;
- this.Txn_open();
- }
- private static Io_url url_(Io_url dir, int id) {
- return dir.GenSubFil_ary("fsdb.bin.", Int_.Xto_str_pad_bgn(id, 4), ".sqlite3");
+ private void Dbs__add(Fsm_bin_fil fil) {
+ this.dbs__ary = (Fsm_bin_fil[])Array_.Resize(dbs__ary, dbs__ary_len + 1);
+ this.dbs__ary[dbs__ary_len++] = fil;
+ this.nth_db = fil;
}
}
diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_bin_tbl.java b/400_xowa/src/gplx/fsdb/meta/Fsm_bin_tbl.java
index eb7ddcb1e..f6d798cc5 100644
--- a/400_xowa/src/gplx/fsdb/meta/Fsm_bin_tbl.java
+++ b/400_xowa/src/gplx/fsdb/meta/Fsm_bin_tbl.java
@@ -18,62 +18,33 @@ along with this program. If not, see .
package gplx.fsdb.meta; import gplx.*; import gplx.fsdb.*;
import gplx.dbs.*; import gplx.dbs.qrys.*;
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 schema_is_1) {
- this.conn = new_conn; flds.Clear();
- if (schema_is_1) {
- tbl_name = "fsdb_db_bin";
- }
- fld_uid = flds.Add_int("uid");
- fld_url = flds.Add_str("url", 255);
- fld_bin_len = flds.Add_long("bin_len");
- fld_bin_max = flds.Add_long("bin_max");
- if (created) {
- Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
- , Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_uid)
- );
- conn.Exec_create_tbl_and_idx(meta);
- }
- stmt_bldr.Conn_(conn, tbl_name, flds, fld_uid);
+ private final String tbl_name; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
+ private final String fld_uid, fld_url;
+ private final Db_conn conn; private int mnt_id;
+ public Fsm_bin_tbl(Db_conn conn, boolean schema_is_1, int mnt_id) {
+ this.conn = conn; this.mnt_id = mnt_id;
+ String fld_prefix = "";
+ if (schema_is_1) {tbl_name = "fsdb_db_bin";}
+ else {tbl_name = "fsdb_dbb"; fld_prefix = "dbb_";}
+ fld_uid = flds.Add_int_pkey (fld_prefix + "uid");
+ fld_url = flds.Add_str (fld_prefix + "url", 255);
}
- public Fsm_bin_fil[] Select_all(Io_url dir) {
+ public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds));}
+ public void Insert(int id, String url_rel) {
+ conn.Stmt_insert(tbl_name, flds).Crt_int(fld_uid, id).Val_str(fld_url, url_rel).Exec_insert();
+ }
+ public Fsm_bin_fil[] Select_all(Fsdb_db_mgr db_conn_mgr) {
ListAdp rv = ListAdp_.new_();
- Db_qry qry = Db_qry__select_cmd.new_().From_(tbl_name).Cols_all_().Where_(Db_crt_.eq_many_(Db_meta_fld.Ary_empy)).OrderBy_asc_(fld_uid);
- Db_rdr rdr = Db_rdr_.Null;
+ Db_rdr rdr = conn.Stmt_select_order(tbl_name, flds, Db_meta_fld.Ary_empy, fld_uid).Clear().Exec_select__rls_auto();
try {
- rdr = conn.Stmt_new(qry).Clear().Exec_select_as_rdr();
while (rdr.Move_next()) {
- Fsm_bin_fil itm = new Fsm_bin_fil
- ( rdr.Read_int(fld_uid)
- , dir.GenSubFil(rdr.Read_str(fld_url))
- , rdr.Read_long(fld_bin_len)
- , rdr.Read_long(fld_bin_max)
- , Db_cmd_mode.Tid_ignore
- );
+ int bin_id = rdr.Read_int(fld_uid);
+ String bin_url = rdr.Read_str(fld_url);
+ Fsdb_db_file bin_db = db_conn_mgr.File__bin_file__at(mnt_id, bin_id, bin_url);
+ Fsm_bin_fil itm = new Fsm_bin_fil(bin_id, bin_url, Fsm_bin_fil.Bin_len_null, bin_db.Conn(), db_conn_mgr.File__schema_is_1());
rv.Add(itm);
}
- } finally {rdr.Rls();}
+ } finally {rdr.Rls();}
return (Fsm_bin_fil[])rv.Xto_ary(Fsm_bin_fil.class);
}
- public void Commit_all(Fsm_bin_fil[] ary) {
- stmt_bldr.Batch_bgn();
- try {
- int len = ary.length;
- for (int i = 0; i < len; i++)
- Commit_itm(ary[i]);
- } finally {stmt_bldr.Batch_end();}
- }
- private void Commit_itm(Fsm_bin_fil itm) {
- Db_stmt stmt = stmt_bldr.Get(itm.Cmd_mode());
- switch (itm.Cmd_mode()) {
- case Db_cmd_mode.Tid_create: stmt.Clear().Crt_int(fld_uid, itm.Id()) .Val_str(fld_url, itm.Url().NameAndExt()).Val_long(fld_bin_len, itm.Bin_len()).Val_long(fld_bin_max, itm.Bin_max()).Exec_insert(); break;
- case Db_cmd_mode.Tid_update: stmt.Clear() .Val_str(fld_url, itm.Url().NameAndExt()).Val_long(fld_bin_len, itm.Bin_len()).Val_long(fld_bin_max, itm.Bin_max()).Crt_int(fld_uid, itm.Id()).Exec_update(); break;
- case Db_cmd_mode.Tid_delete: stmt.Clear().Crt_int(fld_uid, itm.Id()).Exec_delete(); break;
- case Db_cmd_mode.Tid_ignore: break;
- default: throw Err_.unhandled(itm.Cmd_mode());
- }
- itm.Cmd_mode_(Db_cmd_mode.Tid_ignore);
- }
}
diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_cfg_mgr.java b/400_xowa/src/gplx/fsdb/meta/Fsm_cfg_mgr.java
index e502e51dd..69e64e342 100644
--- a/400_xowa/src/gplx/fsdb/meta/Fsm_cfg_mgr.java
+++ b/400_xowa/src/gplx/fsdb/meta/Fsm_cfg_mgr.java
@@ -16,62 +16,35 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.fsdb.meta; import gplx.*; import gplx.fsdb.*;
-import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.xowa.*;
-import gplx.fsdb.meta.*;
+import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.fsdb.meta.*;
public class Fsm_cfg_mgr {
- private final Db_cfg_tbl cfg_tbl = new Db_cfg_tbl();
- private final HashAdp grps = HashAdp_.new_();
+ private final Db_cfg_tbl tbl; private final HashAdp grp_hash = HashAdp_.new_();
+ public Fsm_cfg_mgr(Fsdb_db_mgr db_conn_mgr, Db_conn conn) {
+ this.tbl = new Db_cfg_tbl(conn, db_conn_mgr.File__cfg_tbl_name());
+ }
+ public void Ctor_by_load() {
+ Db_cfg_hash hash = Grps_get_or_load(Grp_core);
+ this.next_id = hash.Get(Key_next_id).To_int_or(-1); if (next_id == -1) throw Err_.new_("next_id not found in cfg");
+ this.schema_thm_page = hash.Get(Key_schema_thm_page).To_yn_or_n();
+ this.patch_next_id = hash.Get(Key_patch_next_id).To_yn_or_n();
+ }
+ public Db_cfg_tbl Tbl() {return tbl;}
public int Next_id() {return next_id++;} private int next_id = 1;
+ public void Next_id_commit() {tbl.Update_int("core", "next_id", next_id);}
public boolean Schema_thm_page() {return schema_thm_page;} private boolean schema_thm_page = true;
public boolean Patch_next_id() {return patch_next_id;} private boolean patch_next_id = true;
public void Patch_next_id_exec(int last_id) {
if (last_id >= next_id)
next_id = last_id + 1;
- cfg_tbl.Insert(Grp_core, Key_patch_next_id, "y");
+ tbl.Insert_yn(Grp_core, Key_patch_next_id, Bool_.Y);
}
- public void Txn_save() {
- this.Update_next_id();
- }
- public void Rls() {cfg_tbl.Rls();}
- private void Update_next_id() {cfg_tbl.Update("core", "next_id", Int_.Xto_str(next_id));}
- public Fsm_cfg_mgr Update(String grp, String key, String new_val) {
- String cur_val = cfg_tbl.Select_as_str_or(grp, key, null);
- if (cur_val == null)
- cfg_tbl.Insert(grp, key, new_val);
- else
- cfg_tbl.Update(grp, key, new_val);
- return this;
- }
- public Db_cfg_grp Grps_get_or_load(String grp_key) {
- Db_cfg_grp grp = (Db_cfg_grp)grps.Fetch(grp_key);
- if (grp == null) {
- grp = cfg_tbl.Select_as_grp(grp_key);
- grps.Add(grp_key, grp);
- }
- return grp;
- }
- public Db_cfg_grp Grps_get_or_add(String grp_key) { // TEST:
- Db_cfg_grp grp = (Db_cfg_grp)grps.Fetch(grp_key);
- if (grp == null) {
- grp = new Db_cfg_grp(grp_key);
- grps.Add(grp_key, grp);
- }
- return grp;
- }
- public static Fsm_cfg_mgr new_() {return new Fsm_cfg_mgr();}
- 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
- cfg_tbl.Insert(Fsm_cfg_mgr.Grp_core, Fsm_cfg_mgr.Key_patch_next_id , "y"); // new dbs automatically have correct next_id
- }
- else {
- Db_cfg_grp core_grp = Grps_get_or_load(Grp_core);
- this.next_id = core_grp.Get_int_or(Key_next_id, -1); if (next_id == -1) throw Err_.new_("next_id not found in fsdb_cfg");
- this.schema_thm_page = core_grp.Get_yn_or_n(Key_schema_thm_page);
- this.patch_next_id = core_grp.Get_yn_or_n(Key_patch_next_id);
+ public Db_cfg_hash Grps_get_or_load(String grp_key) {
+ Db_cfg_hash rv = (Db_cfg_hash)grp_hash.Fetch(grp_key);
+ if (rv == null) {
+ rv = tbl.Select_as_hash(grp_key);
+ grp_hash.Add(grp_key, rv);
}
+ return rv;
}
public static final String Grp_core = "core";
public static final String Key_next_id = "next_id", Key_schema_thm_page = "schema.thm.page", Key_patch_next_id = "patch.next_id";
diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_itm.java b/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_itm.java
index 9e489b9dd..42d73a55c 100644
--- a/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_itm.java
+++ b/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_itm.java
@@ -16,9 +16,58 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.fsdb.meta; import gplx.*; import gplx.fsdb.*;
+import gplx.ios.*; import gplx.dbs.*; import gplx.fsdb.data.*;
public class Fsm_mnt_itm {
- public Fsm_mnt_itm(int id, String name, String url) {this.id = id; this.name = name; this.url = url;}
- public int Id() {return id;} private final int id;
- public String Name() {return name;} private final String name;
- public String Url() {return url;} private final String url;
+ public Fsm_mnt_itm(int id, String name, String url_rel) {this.id = id; this.name = name; this.url_rel = url_rel;}
+ public int Id() {return id;} private final int id;
+ public String Name() {return name;} private final String name;
+ public String Url_rel() {return url_rel;} private final String url_rel;
+ public Fsm_atr_mgr Atr_mgr() {return atr_mgr;} private Fsm_atr_mgr atr_mgr;
+ public Fsm_bin_mgr Bin_mgr() {return bin_mgr;} private Fsm_bin_mgr bin_mgr;
+ public Fsm_cfg_mgr Cfg_mgr() {return cfg_mgr;} private Fsm_cfg_mgr cfg_mgr;
+ public Fsdb_db_mgr Db_mgr() {return db_mgr;} private Fsdb_db_mgr db_mgr;
+ public void Ctor_by_load(Fsdb_db_mgr db_mgr) {
+ this.db_mgr = db_mgr;
+ Db_conn conn = db_mgr.File__abc_file__at(id).Conn();
+ cfg_mgr = new Fsm_cfg_mgr(db_mgr, conn);
+ atr_mgr = new Fsm_atr_mgr(db_mgr, conn, this);
+ bin_mgr = new Fsm_bin_mgr(db_mgr, conn, id);
+ cfg_mgr.Ctor_by_load();
+ atr_mgr.Ctor_by_load(cfg_mgr.Schema_thm_page());
+ bin_mgr.Ctor_by_load();
+ if (!cfg_mgr.Patch_next_id()) Fsm_mnt_itm_.Patch_next_id(this, name);
+ }
+ public int Next_id() {return cfg_mgr.Next_id();}
+ public Fsd_fil_itm Select_fil_or_null(byte[] dir, byte[] fil, boolean is_thumb, int width, double time) {return atr_mgr.Select_fil_or_null(dir, fil);}
+ public boolean Select_thm(Fsd_thm_itm rv, byte[] dir, byte[] fil) {
+ Fsd_fil_itm fil_itm = atr_mgr.Select_fil_or_null(dir, fil);
+ return fil_itm == Fsd_fil_itm.Null ? Bool_.N : atr_mgr.Select_thm(rv, fil_itm.Dir_id(), fil_itm.Fil_id());
+ }
+ public void Insert_img(Fsd_img_itm rv, Fsm_atr_fil atr_fil, Fsm_bin_fil bin_fil, byte[] dir, byte[] fil, int ext_id, int img_w, int img_h, long bin_len, Io_stream_rdr bin_rdr) {
+ int fil_id = atr_fil.Insert_img(rv, dir, fil, ext_id, img_w, img_h, bin_fil.Id(), bin_len, bin_rdr);
+ bin_fil.Insert(fil_id, Fsd_bin_tbl.Owner_tid_fil, bin_len, bin_rdr);
+ }
+ public void Insert_fil(Fsd_fil_itm rv, Fsm_atr_fil atr_fil, Fsm_bin_fil bin_fil, byte[] dir, byte[] fil, int ext_id, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {
+ int fil_id = atr_fil.Insert_fil(rv, dir, fil, ext_id, bin_fil.Id(), bin_len, bin_rdr);
+ bin_fil.Insert(fil_id, Fsd_bin_tbl.Owner_tid_fil, bin_len, bin_rdr);
+ }
+ public void Insert_thm(Fsd_thm_itm rv, Fsm_atr_fil atr_fil, Fsm_bin_fil bin_fil, byte[] dir, byte[] fil, int ext_id, int w, int h, double time, int page, long bin_len, Io_stream_rdr bin_rdr) {
+ int thm_id = atr_fil.Insert_thm(rv, dir, fil, ext_id, w, h, time, page, bin_fil.Id(), bin_len, bin_rdr);
+ bin_fil.Insert(thm_id, Fsd_bin_tbl.Owner_tid_thm, bin_len, bin_rdr);
+ }
+ public void Txn_bgn() {atr_mgr.Txn_bgn(); bin_mgr.Txn_bgn();}
+ public void Txn_end() {atr_mgr.Txn_end(); bin_mgr.Txn_end();}
+}
+class Fsm_mnt_itm_ {
+ public static void Patch_next_id(Fsm_mnt_itm abc_mgr, String name) {
+ if (!String_.Eq(name, "fsdb.user")) return;
+ Fsm_atr_mgr atr_mgr = abc_mgr.Atr_mgr();
+ Fsm_cfg_mgr cfg_mgr = abc_mgr.Cfg_mgr();
+ int last_id = -1;
+ Fsm_atr_fil atr_fil = atr_mgr.Db__core();
+ int max_fil_id = Db_conn_.Select_fld0_as_int_or(atr_fil.Conn(), "SELECT Max(fil_id) AS MaxId FROM fsdb_fil;", -1);
+ int max_thm_id = Db_conn_.Select_fld0_as_int_or(atr_fil.Conn(), "SELECT Max(thm_id) AS MaxId FROM fsdb_xtn_thm;", -1);
+ last_id = max_fil_id > max_thm_id ? max_fil_id : max_thm_id;
+ cfg_mgr.Patch_next_id_exec(last_id);
+ }
}
diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_mgr.java b/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_mgr.java
index 58c684e03..05d42096d 100644
--- a/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_mgr.java
+++ b/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_mgr.java
@@ -16,120 +16,37 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.fsdb.meta; import gplx.*; import gplx.fsdb.*;
-import gplx.core.primitives.*;
import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*;
-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;
- 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 (schema_is_1) {
- Io_url abc_url = db_dir.GenSubFil_nest(itm.Url(), "fsdb.abc.sqlite3");
- abc_mgr.Init_for_db(schema_is_1, abc_url.OwnerDir());
- }
- else
- throw Err_.not_implemented_();
- }
- 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);
- boolean use_thumb_w = cfg_grp.Get_yn_or(Xof_fsdb_mgr_cfg.Key_upright_use_thumb_w, Bool_.N);
- boolean fix_default = cfg_grp.Get_yn_or(Xof_fsdb_mgr_cfg.Key_upright_fix_default, Bool_.N);
- patch_upright_tid = Xof_patch_upright_tid_.Merge(use_thumb_w, fix_default);
- }
- else // TEST: no cfg dbs
- patch_upright_tid = Xof_patch_upright_tid_.Tid_all;
+ private Db_cfg_tbl cfg_tbl; private Fsm_mnt_tbl mnt_tbl;
+ private Fsm_mnt_itm[] mnt_ary; private int mnt_ary_len = 0;
+ public void Ctor_by_load(Fsdb_db_mgr db_core) {
+ Db_conn conn = db_core.File__mnt_file().Conn();
+ this.cfg_tbl = new Db_cfg_tbl (conn, db_core.File__cfg_tbl_name());
+ this.mnt_tbl = new Fsm_mnt_tbl (conn, db_core.File__schema_is_1());
+ this.mnt_ary = mnt_tbl.Select_all();
+ this.mnt_ary_len = mnt_ary.length;
+ for (int i = 0; i < mnt_ary_len; ++i)
+ mnt_ary[i].Ctor_by_load(db_core);
+ this.insert_idx = cfg_tbl.Select_int(Cfg_grp_core, Cfg_key_mnt_insert_idx);
+ Db_cfg_hash cfg_hash = this.Mnts__get_main().Cfg_mgr().Grps_get_or_load(Xof_fsdb_mgr_cfg.Grp_xowa);
+ boolean use_thumb_w = cfg_hash.Get(Xof_fsdb_mgr_cfg.Key_upright_use_thumb_w).To_yn_or_n();
+ boolean fix_default = cfg_hash.Get(Xof_fsdb_mgr_cfg.Key_upright_fix_default).To_yn_or_n();
+ this.patch_upright_tid = Xof_patch_upright_tid_.Merge(use_thumb_w, fix_default);
}
- public Fsm_abc_mgr Mnts__at(int i) {return ary[i];}
- public Fsm_bin_fil Bins__at(int mnt_id, int bin_db_id) {return ary[mnt_id].Bin_mgr().Get_at(bin_db_id);}
- public Fsd_fil_itm Fil_select_bin(byte[] dir, byte[] fil, boolean is_thumb, int width, double thumbtime) {
- for (int i = 0; i < ary_len; i++) {
- Fsd_fil_itm rv = ary[i].Fil_select_bin(dir, fil, is_thumb, width, thumbtime);
- if (rv != Fsd_fil_itm.Null && rv.Db_bin_id() != Fsd_bin_tbl.Null_db_bin_id) { // NOTE: mnt_0 can have thumb, but mnt_1 can have itm; check for itm with Db_bin_id; DATE:2013-11-16
- rv.Mnt_id_(i);
- return rv;
- }
- }
- return Fsd_fil_itm.Null;
- }
- public boolean Thm_select_bin(byte[] dir, byte[] fil, Fsd_thm_itm thm) {
- for (int i = 0; i < ary_len; i++) {
- boolean rv = ary[i].Thm_select_bin(dir, fil, thm);
- if (rv) {
- thm.Mnt_id_(i);
- return rv;
- }
- }
- return false;
- }
- public int Insert_to_mnt() {return insert_to_mnt;} public Fsm_mnt_mgr Insert_to_mnt_(int v) {insert_to_mnt = v; return this;} private int insert_to_mnt = Mnt_idx_user;
- public void Fil_insert(byte[] dir, byte[] fil, int ext_id, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {Fil_insert(new Fsd_fil_itm(), dir, fil, ext_id, modified, hash, bin_len, bin_rdr);}
- public void Fil_insert(Fsd_fil_itm rv, byte[] dir, byte[] fil, int ext_id, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {
- ary[insert_to_mnt].Fil_insert(rv, dir, fil, ext_id, modified, hash, bin_len, bin_rdr);
- }
- public void Thm_insert(byte[] dir, byte[] fil, int ext_id, int w, int h, double time, int page, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {Thm_insert(Fsd_thm_itm.new_(), dir, fil, ext_id, w, h, time, page, modified, hash, bin_len, bin_rdr);}
- public void Thm_insert(Fsd_thm_itm rv, byte[] dir, byte[] fil, int ext_id, int w, int h, double time, int page, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {
- ary[insert_to_mnt].Thm_insert(rv, dir, fil, ext_id, w, h, time, page, modified, hash, bin_len, bin_rdr);
- }
- public void Img_insert(byte[] dir, byte[] fil, int ext_id, int img_w, int img_h, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {Img_insert(new Fsd_img_itm(), dir, fil, ext_id, img_w, img_h, modified, hash, bin_len, bin_rdr);}
- public void Img_insert(Fsd_img_itm rv, byte[] dir, byte[] fil, int ext_id, int img_w, int img_h, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {
- ary[insert_to_mnt].Img_insert(rv, dir, fil, ext_id, modified, hash, bin_len, bin_rdr, img_w, img_h);
- }
- public void Bin_db_max_(long v) {
- for (int i = 0; i < ary_len; i++)
- ary[i].Bin_mgr().Db_bin_max_(v);
- }
- public void Insert_to_bin_(int v) {
- for (int i = 0; i < ary_len; i++)
- ary[i].Bin_mgr().Insert_to_bin_(v);
- }
- public int Patch_upright() {return patch_upright_tid;} private int patch_upright_tid = Xof_patch_upright_tid_.Tid_all;
- public void Txn_open() {
- for (int i = 0; i < ary_len; i++)
- ary[i].Txn_open();
- }
- public void Txn_save() {
- for (int i = 0; i < ary_len; i++)
- ary[i].Txn_save();
- }
- public void Rls() {
- for (int i = 0; i < ary_len; i++)
- ary[i].Rls();
- cfg_tbl.Rls();
- }
- public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
- if (ctx.Match(k, Invk_bin_db_max_in_mb_)) this.Bin_db_max_(m.ReadLong("v") * Io_mgr.Len_mb);
- else if (ctx.Match(k, Invk_insert_to_mnt_)) insert_to_mnt = m.ReadInt("v");
- else if (ctx.Match(k, Invk_insert_to_bin_)) this.Insert_to_bin_(m.ReadInt("v"));
- else return GfoInvkAble_.Rv_unhandled;
- return this;
- } private static final String Invk_bin_db_max_in_mb_ = "bin_db_max_in_mb_", Invk_insert_to_mnt_ = "insert_to_mnt_", Invk_insert_to_bin_ = "insert_to_bin_";
+ public int Mnts__len() {return mnt_ary_len;}
+ public Fsm_mnt_itm Mnts__get_at(int i) {return mnt_ary[i];}
+ public Fsm_mnt_itm Mnts__get_main() {return mnt_ary[Mnt_idx_main];}
+ public Fsm_mnt_itm Mnts__get_insert() {return mnt_ary[insert_idx];} public void Mnts__get_insert_idx_(int v) {insert_idx = v;} private int insert_idx = Mnt_idx_user;
+ public Fsm_bin_fil Bins__at(int mnt_id, int bin_db_id) {return mnt_ary[mnt_id].Bin_mgr().Dbs__get_at(bin_db_id);}
+ public int Patch_upright() {return patch_upright_tid;} private int patch_upright_tid = Xof_patch_upright_tid_.Tid_all;
+ public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {return GfoInvkAble_.Rv_unhandled;}
public static final int Mnt_idx_main = 0, Mnt_idx_user = 1, Insert_to_bin_null = -1;
- public static void Patch(Fsm_mnt_mgr mnt_mgr) {
- mnt_mgr.Mnts__at(Fsm_mnt_mgr.Mnt_idx_main).Cfg_mgr()
- .Update(Xof_fsdb_mgr_cfg.Grp_xowa, Xof_fsdb_mgr_cfg.Key_gallery_fix_defaults , "y")
- .Update(Xof_fsdb_mgr_cfg.Grp_xowa, Xof_fsdb_mgr_cfg.Key_gallery_packed , "y")
- .Update(Xof_fsdb_mgr_cfg.Grp_xowa, Xof_fsdb_mgr_cfg.Key_upright_use_thumb_w , "y")
- .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 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();
+ public static void Patch(Db_cfg_tbl cfg_tbl) {
+ cfg_tbl.Upsert_str(Xof_fsdb_mgr_cfg.Grp_xowa, Xof_fsdb_mgr_cfg.Key_gallery_fix_defaults , "y");
+ cfg_tbl.Upsert_str(Xof_fsdb_mgr_cfg.Grp_xowa, Xof_fsdb_mgr_cfg.Key_gallery_packed , "y");
+ cfg_tbl.Upsert_str(Xof_fsdb_mgr_cfg.Grp_xowa, Xof_fsdb_mgr_cfg.Key_upright_use_thumb_w , "y");
+ cfg_tbl.Upsert_str(Xof_fsdb_mgr_cfg.Grp_xowa, Xof_fsdb_mgr_cfg.Key_upright_fix_default , "y");
}
+ public static final String Cfg_grp_core = "core", Cfg_key_mnt_insert_idx = "mnt.insert_idx"; // SERIALIZED
}
diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_tbl.java b/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_tbl.java
index 47b327a10..3ee9e97d3 100644
--- a/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_tbl.java
+++ b/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_tbl.java
@@ -17,29 +17,24 @@ along with this program. If not, see .
*/
package gplx.fsdb.meta; import gplx.*; import gplx.fsdb.*;
import gplx.dbs.*;
-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 schema_is_1) {
- this.conn = new_conn; flds.Clear();
- String fld_prefix = "";
- if (schema_is_1) {
- tbl_name = "fsdb_mnt";
- fld_prefix = "mnt_";
- }
- fld_id = flds.Add_int(fld_prefix + "id");
- fld_name = flds.Add_str(fld_prefix + "name", 255);
- fld_url = flds.Add_str(fld_prefix + "url", 255);
- if (created) {
- Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
- , Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_id)
- );
- conn.Exec_create_tbl_and_idx(meta);
- this.Insert(Fsm_mnt_mgr.Mnt_idx_main, "fsdb.main", "fsdb.main");
- this.Insert(Fsm_mnt_mgr.Mnt_idx_user, "fsdb.user", "fsdb.user");
- }
+public class Fsm_mnt_tbl implements RlsAble {
+ private final String tbl_name = "fsdb_mnt"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
+ private final String fld_id, fld_name, fld_url;
+ private final Db_conn conn;
+ public Fsm_mnt_tbl(Db_conn conn, boolean schema_is_1) {
+ this.conn = conn;
+ fld_id = flds.Add_int_pkey ("mnt_id");
+ fld_name = flds.Add_str ("mnt_name", 255);
+ fld_url = flds.Add_str ("mnt_url", 255);
+ conn.Rls_reg(this);
}
+ public void Create_tbl() {
+ Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds);
+ conn.Ddl_create_tbl(meta);
+ this.Insert(Fsm_mnt_mgr.Mnt_idx_main, Mnt_name_main, Mnt_name_main);
+ this.Insert(Fsm_mnt_mgr.Mnt_idx_user, Mnt_name_user, Mnt_name_user);
+ }
+ public void Rls() {}
public void Insert(int id, String name, String url) {
Db_stmt stmt = conn.Stmt_insert(tbl_name, flds);
stmt.Clear().Val_int(fld_id, id).Val_str(fld_name, name).Val_str(fld_url, url).Exec_insert();
@@ -49,11 +44,9 @@ public class Fsm_mnt_tbl {
stmt.Clear().Val_str(fld_name, name).Val_str(fld_url, url).Crt_int(fld_id, id).Exec_update();
}
public Fsm_mnt_itm[] Select_all() {
- Db_stmt stmt = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empy);
- Db_rdr rdr = Db_rdr_.Null;
ListAdp list = ListAdp_.new_();
+ Db_rdr rdr = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empy).Clear().Exec_select__rls_auto();
try {
- rdr = stmt.Clear().Exec_select_as_rdr();
while (rdr.Move_next()) {
Fsm_mnt_itm itm = new Fsm_mnt_itm(rdr.Read_int(fld_id), rdr.Read_str(fld_name), rdr.Read_str(fld_url));
list.Add(itm);
@@ -62,4 +55,5 @@ public class Fsm_mnt_tbl {
finally {rdr.Rls();}
return (Fsm_mnt_itm[])list.Xto_ary_and_clear(Fsm_mnt_itm.class);
}
+ public static final String Mnt_name_main = "fsdb.main", Mnt_name_user = "fsdb.user";
}
diff --git a/400_xowa/src/gplx/ios/Io_stream_zip_mgr.java b/400_xowa/src/gplx/ios/Io_stream_zip_mgr.java
index 4ea925a31..3677accd2 100644
--- a/400_xowa/src/gplx/ios/Io_stream_zip_mgr.java
+++ b/400_xowa/src/gplx/ios/Io_stream_zip_mgr.java
@@ -21,14 +21,14 @@ public class Io_stream_zip_mgr {
private Io_stream_wtr wtr_gzip, wtr_zip, wtr_bzip2;
private Io_stream_rdr rdr_gzip, rdr_zip, rdr_bzip2;
public byte[] Zip(byte type, byte[] val) {
- if (type == Io_stream_.Tid_file) return val;
+ if (type == Io_stream_.Tid_raw) return val;
Io_stream_wtr wtr = Wtr(type);
wtr.Write(val, 0, val.length);
wtr.Flush();
return wtr.Xto_ary_and_clear();
}
public byte[] Unzip(byte type, byte[] val) {
- if (type == Io_stream_.Tid_file) return val;
+ if (type == Io_stream_.Tid_raw) return val;
Io_stream_rdr rdr = Rdr(type);
rdr.Open_mem(val);
return Io_stream_rdr_.Load_all_as_bry(bfr, rdr);
@@ -38,7 +38,7 @@ public class Io_stream_zip_mgr {
case Io_stream_.Tid_gzip : if (wtr_gzip == null) wtr_gzip = Io_stream_wtr_.new_by_mem(bfr, Io_stream_.Tid_gzip) ; return wtr_gzip.Open();
case Io_stream_.Tid_zip : if (wtr_zip == null) wtr_zip = Io_stream_wtr_.new_by_mem(bfr, Io_stream_.Tid_zip) ; return wtr_zip.Open();
case Io_stream_.Tid_bzip2 : if (wtr_bzip2 == null) wtr_bzip2 = Io_stream_wtr_.new_by_mem(bfr, Io_stream_.Tid_bzip2) ; return wtr_bzip2.Open();
- case Io_stream_.Tid_file :
+ case Io_stream_.Tid_raw :
default : throw Err_.unhandled(type);
}
}
@@ -47,7 +47,7 @@ public class Io_stream_zip_mgr {
case Io_stream_.Tid_gzip : if (rdr_gzip == null) rdr_gzip = Io_stream_rdr_.new_by_tid_(Io_stream_.Tid_gzip) ; return rdr_gzip;
case Io_stream_.Tid_zip : if (rdr_zip == null) rdr_zip = Io_stream_rdr_.new_by_tid_(Io_stream_.Tid_zip) ; return rdr_zip;
case Io_stream_.Tid_bzip2 : if (rdr_bzip2 == null) rdr_bzip2 = Io_stream_rdr_.new_by_tid_(Io_stream_.Tid_bzip2) ; return rdr_bzip2;
- case Io_stream_.Tid_file :
+ case Io_stream_.Tid_raw :
default : throw Err_.unhandled(type);
}
}
diff --git a/400_xowa/src/gplx/srls/dsvs/Dsv_wkr_base.java b/400_xowa/src/gplx/srls/dsvs/Dsv_wkr_base.java
index 631ddbca9..c59763d23 100644
--- a/400_xowa/src/gplx/srls/dsvs/Dsv_wkr_base.java
+++ b/400_xowa/src/gplx/srls/dsvs/Dsv_wkr_base.java
@@ -18,10 +18,12 @@ along with this program. If not, see .
package gplx.srls.dsvs; import gplx.*; import gplx.srls.*;
public abstract class Dsv_wkr_base implements GfoInvkAble {
public abstract Dsv_fld_parser[] Fld_parsers();
+ public byte[] Src() {return src;} private byte[] src;
public abstract void Commit_itm(Dsv_tbl_parser parser, int pos);
@gplx.Virtual public boolean Write_bry(Dsv_tbl_parser parser, int fld_idx, byte[] src, int bgn, int end) {return false;}
@gplx.Virtual public boolean Write_int(Dsv_tbl_parser parser, int fld_idx, int pos, int val_int) {return false;}
public void Load_by_bry(byte[] src) {
+ this.src = src;
Dsv_tbl_parser tbl_parser = new Dsv_tbl_parser(); // NOTE: this proc should only be called once, so don't bother caching tbl_parser
tbl_parser.Init(this, this.Fld_parsers());
Load_by_bry_bgn();
diff --git a/400_xowa/src/gplx/xowa/Xoa_app_.java b/400_xowa/src/gplx/xowa/Xoa_app_.java
index 7afa943d2..b18df21e1 100644
--- a/400_xowa/src/gplx/xowa/Xoa_app_.java
+++ b/400_xowa/src/gplx/xowa/Xoa_app_.java
@@ -18,7 +18,7 @@ along with this program. If not, see .
package gplx.xowa; import gplx.*;
import gplx.dbs.*; import gplx.ios.*; import gplx.gfui.*;
import gplx.xowa.apps.*; import gplx.xowa.langs.*; import gplx.xowa.users.*;
-import gplx.xowa.html.hdumps.*; import gplx.xowa.html.hdumps.core.*;
+import gplx.xowa.files.*; 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.3.2.1";
+ public static final String Version = "2.4.1.1";
public static String Build_date = "2012-12-30 00:00:00";
public static String Op_sys;
public static String User_agent = "";
@@ -44,6 +44,7 @@ public class Xoa_app_ {
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 Xof_url_bldr Utl__url_bldr() {return utl__url_bldr;} private static final Xof_url_bldr utl__url_bldr = Xof_url_bldr.new_v2_();
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;
@@ -66,7 +67,7 @@ class Xoa_app_boot_mgr {
}
}
private boolean Init_env(String[] args) {
- Gfo_usr_dlg_._ = usr_dlg = Xoa_app_.usr_dlg_console_();
+ Gfo_usr_dlg_.I = usr_dlg = Xoa_app_.usr_dlg_console_();
log_wtr = usr_dlg.Log_wtr(); log_wtr.Log_msg_to_session_fmt("env.init: version=~{0}", Xoa_app_.Version);
GfuiEnv_.Init_swt(args, Xoa_app_.class);
Io_url jar_url = Env_.AppUrl();
diff --git a/400_xowa/src/gplx/xowa/Xoa_app_fxt.java b/400_xowa/src/gplx/xowa/Xoa_app_fxt.java
index fffd5bff9..b0f3b6510 100644
--- a/400_xowa/src/gplx/xowa/Xoa_app_fxt.java
+++ b/400_xowa/src/gplx/xowa/Xoa_app_fxt.java
@@ -16,17 +16,18 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa; import gplx.*;
-import gplx.xowa.apps.*;
+import gplx.dbs.*; import gplx.xowa.apps.*;
public class Xoa_app_fxt {
public static Xoae_app app_() {
Io_mgr._.InitEngine_mem();
+ Db_conn_bldr.I.Reg_default_mem();
return app_("linux", Io_url_.mem_dir_("mem/xowa/"));
}
public static Xoae_app app_(String op_sys, Io_url root_dir) {
Io_url user_dir = root_dir.GenSubDir_nest("user", "test_user");
Gfo_log_wtr_base._.Log_dir_(user_dir.GenSubDir_nest("tmp", "current"));
Xoae_app app = new Xoae_app(Gfo_usr_dlg_base.test_(), root_dir, user_dir, op_sys);
- app.Setup_mgr().Dump_mgr().Data_storage_format_(gplx.ios.Io_stream_.Tid_file); // TEST: set data_storage_format to file, else bldr tests will fails (expects plain text)
+ app.Setup_mgr().Dump_mgr().Data_storage_format_(gplx.ios.Io_stream_.Tid_raw); // TEST: set data_storage_format to file, else bldr tests will fails (expects plain text)
GfsCore._.Clear(); // NOTE: must clear
GfsCore._.AddCmd(app, Xoae_app.Invk_app); // NOTE: must add app to GfsCore; app.Gfs_mgr() always adds current app to GfsCore; note this causes old test to leave behind GfsCore for new test
GfsCore._.AddCmd(app, Xoae_app.Invk_xowa); // add alias for app; DATE:2014-06-09
diff --git a/400_xowa/src/gplx/xowa/Xoae_app.java b/400_xowa/src/gplx/xowa/Xoae_app.java
index ac962c384..1ffa5e34e 100644
--- a/400_xowa/src/gplx/xowa/Xoae_app.java
+++ b/400_xowa/src/gplx/xowa/Xoae_app.java
@@ -69,6 +69,7 @@ public class Xoae_app implements Xoa_app, GfoInvkAble {
public Url_encoder_mgr Utl__encoder_mgr() {return Xoa_app_.Utl__encoder_mgr();}
+ public Xoa_css_extractor Css_installer() {return css_installer;} private final Xoa_css_extractor css_installer = new Xoa_css_extractor();
public Xoa_wiki_mgr Wiki_mgr() {return wiki_mgr;} private Xoa_wiki_mgr wiki_mgr;
public Xou_user_mgr User_mgr() {return user_mgr;} private Xou_user_mgr user_mgr;
public Xof_file_mgr File_mgr() {return file_mgr;} private Xof_file_mgr file_mgr = new Xof_file_mgr();
@@ -131,6 +132,7 @@ public class Xoae_app implements Xoa_app, GfoInvkAble {
gui_mgr.Init_by_app();
user.Init_by_app(this);
file_mgr.Init_by_app(this);
+ css_installer.Init_by_app(this);
wiki_mgr.Init_by_app();
gplx.xowa.utls.upgrades.Xoa_upgrade_mgr.Check(this);
ctg_mgr.Init_by_app(this);
diff --git a/400_xowa/src/gplx/xowa/apis/Xoapi_doc.java b/400_xowa/src/gplx/xowa/apis/Xoapi_doc.java
new file mode 100644
index 000000000..006509e7f
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/apis/Xoapi_doc.java
@@ -0,0 +1,174 @@
+/*
+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 .
+*/
+package gplx.xowa.apis; import gplx.*; import gplx.xowa.*;
+/*
+xowa {
+app {
+ exit();
+ env {
+ version_previous;
+ }
+ fsys {
+ plat_jar;
+ plat_url();
+ }
+ startup {
+ tabs {
+ type; // [blank,xowa,custom,previous]
+ previous;
+ custom;
+ custom_is_expr;
+ }
+ }
+}
+nav {
+ go_bwd();
+ go_fwd();
+ goto();
+ wiki {
+ main_page();
+ random();
+ sandbox();
+ }
+}
+gui {
+ browser {
+ url {
+ focus();
+ exec_by_paste();
+ exec_new_tab_by_paste();
+ restore();
+ exec();
+ }
+ search {
+ focus();
+ exec();
+ }
+ tabs {
+ new_dflt__at_dflt__focus_y();
+ new_link__at_dflt__focus_n();
+ new_link__at_dflt__focus_y();
+ new_href__at_dflt__focus_y();
+ new_dupe__at_dflt__focus_y();
+ close_cur();
+ select_bwd();
+ select_fwd();
+ move_bwd();
+ move_fwd();
+ close_others();
+ close_to_bgn();
+ close_to_end();
+ close_undo();
+ pin_toggle();
+ select_by_idx_1();
+ select_by_idx_2();
+ select_by_idx_3();
+ select_by_idx_4();
+ select_by_idx_5();
+ select_by_idx_6();
+ select_by_idx_7();
+ select_by_idx_8();
+ select_by_idx_9();
+ }
+ html {
+ focus();
+ selection_focus_toggle();
+ load_tid; // [mem,url]
+ }
+ find {
+ show();
+ show_by_paste();
+ hide();
+ exec();
+ type();
+ find_bwd();
+ find_fwd();
+ case_toggle();
+ wrap_toggle();
+ }
+ prog {
+ focus();
+ }
+ info {
+ focus();
+ clear();
+ launch();
+ warn_enabled;
+ note_enabled;
+ }
+ prog_log {
+ show();
+ }
+ }
+ font {
+ increase();
+ decrease();
+ reset();
+ }
+ page {
+ edit {
+ copy();
+ select_all();
+ save();
+ save_draft();
+ preview();
+ focus_edit_box();
+ dbg_tmpl();
+ dbg_html();
+ exec();
+ }
+ selection {
+ copy();
+ select_all();
+ save_file_as();
+ }
+ view {
+ mode_read();
+ mode_edit();
+ mode_html();
+ reload();
+ refresh();
+ print();
+ save_as();
+ }
+ }
+}
+html {
+
+}
+net {
+}
+usr {
+}
+xtns {
+}
+bldr {
+ wikis {
+ filters {
+ dansguardians {
+ }
+ }
+ imports {
+ one_file = 'y';
+ schema_is_1 = 'y';
+ text_zip_tid = '.gz';
+ html_zip_tid = '.gz';
+ }
+ }
+}
+*/
diff --git a/400_xowa/src/gplx/xowa/apis/Xoapi_root.java b/400_xowa/src/gplx/xowa/apis/Xoapi_root.java
index 20b11583e..5da4b8482 100644
--- a/400_xowa/src/gplx/xowa/apis/Xoapi_root.java
+++ b/400_xowa/src/gplx/xowa/apis/Xoapi_root.java
@@ -20,6 +20,7 @@ import gplx.xowa.apis.xowa.*; import gplx.xowa.gui.cmds.*;
public class Xoapi_root implements GfoInvkAble {
private Xoae_app app;
public Xoapi_root(Xoae_app app) {
+ app_api.Ctor_by_app(app);
usr_api.Ctor_by_app(app);
bldr_api.Ctor_by_app(app);
}
diff --git a/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_app.java b/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_app.java
index 876147125..124446a75 100644
--- a/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_app.java
+++ b/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_app.java
@@ -17,21 +17,26 @@ along with this program. If not, see .
*/
package gplx.xowa.apis.xowa; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*;
import gplx.xowa.gui.views.*;
-import gplx.xowa.apis.xowa.envs.*; import gplx.xowa.apis.xowa.startups.*;
+import gplx.xowa.apis.xowa.apps.*; import gplx.xowa.apis.xowa.envs.*; import gplx.xowa.apis.xowa.startups.*;
public class Xoapi_app implements GfoInvkAble {
private Xog_win_itm win;
+ public void Ctor_by_app(Xoae_app app) {
+ fsys.Ctor_by_app(app);
+ }
public void Init_by_kit(Xoae_app app) {
win = app.Gui_mgr().Browser_win();
}
- public void Exit() {win.App__exit();}
- public Xoapi_env Env() {return env;} private Xoapi_env env = new Xoapi_env();
- public Xoapi_startups Startup() {return startup;} private Xoapi_startups startup = new Xoapi_startups();
+ public Xoapi_fsys Fsys() {return fsys;} private Xoapi_fsys fsys = new Xoapi_fsys();
+ public void Exit() {win.App__exit();}
+ public Xoapi_env Env() {return env;} private Xoapi_env env = new Xoapi_env();
+ public Xoapi_startups Startup() {return startup;} private Xoapi_startups startup = new Xoapi_startups();
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_exit)) this.Exit();
+ else if (ctx.Match(k, Invk_fsys)) return fsys;
else if (ctx.Match(k, Invk_startup)) return startup;
else if (ctx.Match(k, Invk_env)) return env;
else return GfoInvkAble_.Rv_unhandled;
return this;
}
- private static final String Invk_exit = "exit", Invk_startup = "startup", Invk_env = "env";
+ private static final String Invk_exit = "exit", Invk_startup = "startup", Invk_env = "env", Invk_fsys = "fsys";
}
diff --git a/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_bldr.java b/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_bldr.java
index 9b8ef6516..242d58a3f 100644
--- a/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_bldr.java
+++ b/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_bldr.java
@@ -18,11 +18,11 @@ along with this program. If not, see .
package gplx.xowa.apis.xowa; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*;
import gplx.xowa.apis.xowa.bldrs.*;
public class Xoapi_bldr implements GfoInvkAble {
- public void Ctor_by_app(Xoa_app app) {wikis.Ctor_by_app(app);}
- public Xoapi_bldr_wikis Wikis() {return wikis;} private final Xoapi_bldr_wikis wikis = new Xoapi_bldr_wikis();
+ public void Ctor_by_app(Xoa_app app) {wiki.Ctor_by_app(app);}
+ public Xoapi_bldr_wiki Wiki() {return wiki;} private final Xoapi_bldr_wiki wiki = new Xoapi_bldr_wiki();
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
- if (ctx.Match(k, Invk_wikis)) return wikis;
+ if (ctx.Match(k, Invk_wiki)) return wiki;
else return GfoInvkAble_.Rv_unhandled;
}
- private static final String Invk_wikis = "wikis";
+ private static final String Invk_wiki = "wiki";
}
diff --git a/400_xowa/src/gplx/xowa/apis/xowa/apps/Xoapi_fsys.java b/400_xowa/src/gplx/xowa/apis/xowa/apps/Xoapi_fsys.java
new file mode 100644
index 000000000..091d17cf4
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/apis/xowa/apps/Xoapi_fsys.java
@@ -0,0 +1,32 @@
+/*
+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 .
+*/
+package gplx.xowa.apis.xowa.apps; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*;
+public class Xoapi_fsys implements GfoInvkAble {
+ public void Ctor_by_app(Xoae_app app) {
+ this.plat_jar = Env_.AppUrl();
+ this.root_dir = app.Fsys_mgr().Root_dir();
+ }
+ public Io_url Plat_jar() {return plat_jar;} private Io_url plat_jar;
+ public Io_url Plat_url(String s) {return Io_url_.new_any_(root_dir.Gen_sub_path_for_os(s));} private Io_url root_dir;
+ public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
+ if (ctx.Match(k, Invk_plat_jar)) return plat_jar;
+ else if (ctx.Match(k, Invk_plat_url)) return Plat_url(m.ReadStr("v"));
+ else return GfoInvkAble_.Rv_unhandled;
+ }
+ private static final String Invk_plat_jar = "plat_jar", Invk_plat_url = "plat_url";
+}
diff --git a/400_xowa/src/gplx/xowa/apis/xowa/bldrs/Xoapi_bldr_wikis.java b/400_xowa/src/gplx/xowa/apis/xowa/bldrs/Xoapi_bldr_wiki.java
similarity index 62%
rename from 400_xowa/src/gplx/xowa/apis/xowa/bldrs/Xoapi_bldr_wikis.java
rename to 400_xowa/src/gplx/xowa/apis/xowa/bldrs/Xoapi_bldr_wiki.java
index 9ac13f175..0402115a2 100644
--- a/400_xowa/src/gplx/xowa/apis/xowa/bldrs/Xoapi_bldr_wikis.java
+++ b/400_xowa/src/gplx/xowa/apis/xowa/bldrs/Xoapi_bldr_wiki.java
@@ -17,12 +17,15 @@ along with this program. If not, see .
*/
package gplx.xowa.apis.xowa.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*;
import gplx.xowa.apis.xowa.bldrs.filters.*;
-public class Xoapi_bldr_wikis implements GfoInvkAble {
- public void Ctor_by_app(Xoa_app app) {filters.Ctor_by_app(app);}
- public Xoapi_filters Filters() {return filters;} private final Xoapi_filters filters = new Xoapi_filters();
+import gplx.xowa.apis.xowa.bldrs.imports.*;
+public class Xoapi_bldr_wiki implements GfoInvkAble {
+ public void Ctor_by_app(Xoa_app app) {filter.Ctor_by_app(app);}
+ public Xoapi_filter Filter() {return filter;} private final Xoapi_filter filter = new Xoapi_filter();
+ public Xoapi_import Import() {return import_api;} private final Xoapi_import import_api = new Xoapi_import();
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
- if (ctx.Match(k, Invk_filters)) return filters;
+ if (ctx.Match(k, Invk_filter)) return filter;
+ else if (ctx.Match(k, Invk_import)) return import_api;
else return GfoInvkAble_.Rv_unhandled;
}
- private static final String Invk_filters = "filters";
+ private static final String Invk_filter = "filter", Invk_import = "import";
}
diff --git a/400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/Xoapi_filters.java b/400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/Xoapi_filter.java
similarity index 71%
rename from 400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/Xoapi_filters.java
rename to 400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/Xoapi_filter.java
index 84a2ef48d..4f8706aa5 100644
--- a/400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/Xoapi_filters.java
+++ b/400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/Xoapi_filter.java
@@ -17,12 +17,12 @@ along with this program. If not, see .
*/
package gplx.xowa.apis.xowa.bldrs.filters; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.apis.xowa.bldrs.*;
import gplx.xowa.apis.xowa.bldrs.filters.dansguardians.*;
-public class Xoapi_filters implements GfoInvkAble {
- public void Ctor_by_app(Xoa_app app) {dansguardians.Ctor_by_app(app);}
- public Xoapi_dansguardians Dansguardians() {return dansguardians;} private final Xoapi_dansguardians dansguardians = new Xoapi_dansguardians();
+public class Xoapi_filter implements GfoInvkAble {
+ public void Ctor_by_app(Xoa_app app) {dansguardian.Ctor_by_app(app);}
+ public Xoapi_dansguardian Dansguardian() {return dansguardian;} private final Xoapi_dansguardian dansguardian = new Xoapi_dansguardian();
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
- if (ctx.Match(k, Invk_dansguardians)) return dansguardians;
+ if (ctx.Match(k, Invk_dansguardian)) return dansguardian;
else return GfoInvkAble_.Rv_unhandled;
}
- private static final String Invk_dansguardians = "dansguardians";
+ private static final String Invk_dansguardian = "dansguardian";
}
diff --git a/400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/dansguardians/Xoapi_dansguardians.java b/400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/dansguardians/Xoapi_dansguardian.java
similarity index 97%
rename from 400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/dansguardians/Xoapi_dansguardians.java
rename to 400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/dansguardians/Xoapi_dansguardian.java
index ed2acf468..5fafff236 100644
--- a/400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/dansguardians/Xoapi_dansguardians.java
+++ b/400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/dansguardians/Xoapi_dansguardian.java
@@ -17,7 +17,7 @@ along with this program. If not, see .
*/
package gplx.xowa.apis.xowa.bldrs.filters.dansguardians; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.apis.xowa.bldrs.*; import gplx.xowa.apis.xowa.bldrs.filters.*;
import gplx.ios.*; import gplx.xowa.bldrs.filters.dansguardians.*;
-public class Xoapi_dansguardians implements GfoInvkAble {
+public class Xoapi_dansguardian implements GfoInvkAble {
public void Ctor_by_app(Xoa_app app) {
root_dir = app.Fsys_mgr().Bin_xowa_dir().GenSubDir_nest("cfg", "bldr", "filter");
}
diff --git a/400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/titles/Xoapi_titles.java b/400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/titles/Xoapi_title.java
similarity index 97%
rename from 400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/titles/Xoapi_titles.java
rename to 400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/titles/Xoapi_title.java
index 64678af5f..fddc65a90 100644
--- a/400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/titles/Xoapi_titles.java
+++ b/400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/titles/Xoapi_title.java
@@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.apis.xowa.bldrs.filters.titles; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.apis.xowa.bldrs.*; import gplx.xowa.apis.xowa.bldrs.filters.*;
-public class Xoapi_titles implements GfoInvkAble {
+public class Xoapi_title implements GfoInvkAble {
public void Init_by_kit(Xoae_app app) {
// wordlist_dir = app.Fsys_mgr().Bin_xtns_dir().GenSubDir_nest("xowa", "DansGuardian");
}
diff --git a/400_xowa/src/gplx/xowa/apis/xowa/bldrs/imports/Xoapi_import.java b/400_xowa/src/gplx/xowa/apis/xowa/bldrs/imports/Xoapi_import.java
new file mode 100644
index 000000000..f87444a8a
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/apis/xowa/bldrs/imports/Xoapi_import.java
@@ -0,0 +1,91 @@
+/*
+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 .
+*/
+package gplx.xowa.apis.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.apis.xowa.bldrs.*;
+import gplx.ios.*; import gplx.xowa.wikis.data.*;
+public class Xoapi_import implements GfoInvkAble {
+ public long Layout_all_max() {return layout_all_max;} private long layout_all_max = 0; // disable by default; may set to 200 MB in future
+ public long Layout_text_max() {return layout_text_max;} private long layout_text_max = Io_size_.To_long_by_int_mb(1500); // 1.5 GB
+ public long Layout_html_max() {return layout_html_max;} private long layout_html_max = Io_size_.To_long_by_int_mb(1500); // 1.5 GB
+ public long Layout_file_max() {return layout_file_max;} private long layout_file_max = Io_size_.To_long_by_int_mb(1500); // 1.5 GB
+ public long Cat_link_db_max() {return cat_link_db_max;} private long cat_link_db_max = Io_size_.To_long_by_int_mb(3600); // 3.6 GB; v1
+ public long Text_db_max() {return text_db_max;} private long text_db_max = Io_size_.To_long_by_int_mb(3000); // 3.0 GB; v1
+ public long Html_db_max() {return html_db_max;} private long html_db_max = Io_size_.To_long_by_int_mb(3000); // 3.0 GB; v2; use same as text
+ public long File_db_max() {return file_db_max;} private long file_db_max = Io_size_.To_long_by_int_mb(3200); // 3.2 GB; v2
+ public byte[] Ns_file_map() {return ns_file_map;} private byte[] ns_file_map = Ns_file_map__each;
+ public byte Zip_tid_text() {return zip_tid_text;} private byte zip_tid_text = Io_stream_.Tid_gzip;
+ public byte Zip_tid_html() {return zip_tid_html;} private byte zip_tid_html = Io_stream_.Tid_gzip;
+ public String User_name() {return user_name;} private String user_name = "anonymous";
+ public Xowd_core_db_props New_props(String domain_str, long dump_file_size) {
+ Xowd_db_layout layout_text, layout_html, layout_file;
+ if (dump_file_size < layout_all_max)
+ layout_text = layout_html = layout_file = Xowd_db_layout.Itm_all;
+ else {
+ layout_text = dump_file_size < layout_text_max ? Xowd_db_layout.Itm_few : Xowd_db_layout.Itm_lot;
+ layout_html = dump_file_size < layout_html_max ? Xowd_db_layout.Itm_few : Xowd_db_layout.Itm_lot;
+ layout_file = dump_file_size < layout_file_max ? Xowd_db_layout.Itm_few : Xowd_db_layout.Itm_lot;
+ }
+ return new Xowd_core_db_props(2, layout_text, layout_html, layout_file, zip_tid_text, zip_tid_html);
+ }
+ public byte[] New_ns_file_map(long dump_file_size) {
+ return dump_file_size < layout_text_max ? Bry_.Empty : Ns_file_map__each;
+ }
+ public void Zip_tid_text_raw_() {zip_tid_text = Io_stream_.Tid_raw;} // TEST:
+ public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
+ if (ctx.Match(k, Invk_layout_all_max)) return Io_size_.To_str_mb(layout_all_max);
+ else if (ctx.Match(k, Invk_layout_all_max_)) layout_all_max = Io_size_.To_long_by_msg_mb(m);
+ else if (ctx.Match(k, Invk_layout_text_max)) return Io_size_.To_str_mb(layout_text_max);
+ else if (ctx.Match(k, Invk_layout_text_max_)) layout_text_max = Io_size_.To_long_by_msg_mb(m);
+ else if (ctx.Match(k, Invk_layout_html_max)) return Io_size_.To_str_mb(layout_html_max);
+ else if (ctx.Match(k, Invk_layout_html_max_)) layout_html_max = Io_size_.To_long_by_msg_mb(m);
+ else if (ctx.Match(k, Invk_layout_file_max)) return Io_size_.To_str_mb(layout_file_max);
+ else if (ctx.Match(k, Invk_layout_file_max_)) layout_file_max = Io_size_.To_long_by_msg_mb(m);
+ else if (ctx.Match(k, Invk_cat_link_db_max)) return Io_size_.To_str_mb(cat_link_db_max);
+ else if (ctx.Match(k, Invk_cat_link_db_max_)) cat_link_db_max = Io_size_.To_long_by_msg_mb(m);
+ else if (ctx.Match(k, Invk_text_db_max)) return Io_size_.To_str_mb(text_db_max);
+ else if (ctx.Match(k, Invk_text_db_max_)) text_db_max = Io_size_.To_long_by_msg_mb(m);
+ else if (ctx.Match(k, Invk_html_db_max)) return Io_size_.To_str_mb(html_db_max);
+ else if (ctx.Match(k, Invk_html_db_max_)) html_db_max = Io_size_.To_long_by_msg_mb(m);
+ else if (ctx.Match(k, Invk_file_db_max)) return Io_size_.To_str_mb(file_db_max);
+ else if (ctx.Match(k, Invk_file_db_max_)) file_db_max = Io_size_.To_long_by_msg_mb(m);
+ else if (ctx.Match(k, Invk_ns_file_map)) return String_.new_utf8_(ns_file_map);
+ else if (ctx.Match(k, Invk_ns_file_map_)) ns_file_map = m.ReadBry("v");
+ else if (ctx.Match(k, Invk_zip_tid_text)) return Io_stream_.To_str(zip_tid_text);
+ else if (ctx.Match(k, Invk_zip_tid_text_)) zip_tid_text = Io_stream_.To_tid(m.ReadStr("v"));
+ else if (ctx.Match(k, Invk_zip_tid_html)) return Io_stream_.To_str(zip_tid_html);
+ else if (ctx.Match(k, Invk_zip_tid_html_)) zip_tid_html = Io_stream_.To_tid(m.ReadStr("v"));
+ else if (ctx.Match(k, Invk_user_name)) return user_name;
+ else if (ctx.Match(k, Invk_user_name_)) user_name = m.ReadStr("v");
+ else return GfoInvkAble_.Rv_unhandled;
+ return this;
+ }
+ private static final String
+ Invk_layout_all_max = "layout_all_max" , Invk_layout_all_max_ = "layout_all_max_"
+ , Invk_layout_text_max = "layout_text_max" , Invk_layout_text_max_ = "layout_text_max_"
+ , Invk_layout_html_max = "layout_html_max" , Invk_layout_html_max_ = "layout_html_max_"
+ , Invk_layout_file_max = "layout_file_max" , Invk_layout_file_max_ = "layout_file_max_"
+ , Invk_cat_link_db_max = "cat_link_db_max" , Invk_cat_link_db_max_ = "cat_link_db_max_"
+ , Invk_text_db_max = "text_db_max" , Invk_text_db_max_ = "text_db_max_"
+ , Invk_html_db_max = "html_db_max" , Invk_html_db_max_ = "html_db_max_"
+ , Invk_file_db_max = "file_db_max" , Invk_file_db_max_ = "file_db_max_"
+ , Invk_ns_file_map = "ns_file_map" , Invk_ns_file_map_ = "ns_file_map_"
+ , Invk_zip_tid_text = "zip_tid_text" , Invk_zip_tid_text_ = "zip_tid_text_"
+ , Invk_zip_tid_html = "zip_tid_html" , Invk_zip_tid_html_ = "zip_tid_html_"
+ , Invk_user_name = "user_name" , Invk_user_name_ = "user_name_"
+ ;
+ public static final byte[] Ns_file_map__each = Bry_.new_ascii_("");
+}
diff --git a/400_xowa/src/gplx/xowa/apps/Xoa_gfs_mgr.java b/400_xowa/src/gplx/xowa/apps/Xoa_gfs_mgr.java
index 08fb7ac58..d5161db0a 100644
--- a/400_xowa/src/gplx/xowa/apps/Xoa_gfs_mgr.java
+++ b/400_xowa/src/gplx/xowa/apps/Xoa_gfs_mgr.java
@@ -41,14 +41,14 @@ public class Xoa_gfs_mgr implements GfoInvkAble, GfoInvkRootWkr {
catch (Exception e) { // gfs is corrupt; may happen if multiple XOWAs opened, and "Close all" chosen in OS; DATE:2014-07-01
if (!String_.Eq(type, "xowa")) // check if user.gfs
Io_mgr._.MoveFil(url, url.GenNewNameOnly(url.NameOnly() + "-" + DateAdp_.Now().XtoStr_fmt_yyyyMMdd_HHmmss())); // move file
- Gfo_usr_dlg_._.Warn_many("", "", "invalid gfs; obsoleting: src=~{0} err=~{1}", url.Raw(), Err_.Message_gplx(e));
+ Gfo_usr_dlg_.I.Warn_many("", "", "invalid gfs; obsoleting: src=~{0} err=~{1}", url.Raw(), Err_.Message_gplx(e));
}
}
public GfoMsg Parse_root_msg(String v) {return gplx.gfs.Gfs_msg_bldr._.ParseToMsg(v);}
public Gfs_wtr Wtr() {return wtr;} private Gfs_wtr wtr = new Gfs_wtr();
public void Run_url(Io_url url) {
Run_url_for(GfsCore._.Root(), url);
- Gfo_usr_dlg_._.Log_wtr().Log_msg_to_session_fmt("gfs.done: ~{0}", url.Raw());
+ Gfo_usr_dlg_.I.Log_wtr().Log_msg_to_session_fmt("gfs.done: ~{0}", url.Raw());
}
public void Run_url_for(GfoInvkAble invk, Io_url url) {
String raw = Io_mgr._.LoadFilStr_args(url).MissingIgnored_().Exec(); if (String_.Len_eq_0(raw)) return;
@@ -59,7 +59,7 @@ public class Xoa_gfs_mgr implements GfoInvkAble, GfoInvkRootWkr {
public Object Run_str_for(GfoInvkAble invk, GfoMsg root_msg) {
try {
int sub_msgs_len = root_msg.Subs_count();
- GfsCtx ctx = GfsCtx.new_().Fail_if_unhandled_(Fail_if_unhandled).Usr_dlg_(Gfo_usr_dlg_._);
+ GfsCtx ctx = GfsCtx.new_().Fail_if_unhandled_(Fail_if_unhandled).Usr_dlg_(Gfo_usr_dlg_.I);
Object rv = null;
for (int i = 0; i < sub_msgs_len; i++) {
GfoMsg sub_msg = root_msg.Subs_getAt(i);
@@ -67,7 +67,7 @@ public class Xoa_gfs_mgr implements GfoInvkAble, GfoInvkRootWkr {
}
return rv;
} catch (Exception e) {
- Gfo_usr_dlg_._.Warn_many("", "", "error while executing script: err=~{0}", Err_.Message_gplx(e));
+ Gfo_usr_dlg_.I.Warn_many("", "", "error while executing script: err=~{0}", Err_.Message_gplx(e));
return GfoInvkAble_.Rv_error;
}
}
@@ -120,7 +120,7 @@ class Xoa_gfs_mgr_ {
if (!Io_mgr._.ExistsFil(dflt_url)) return; // no dflt
if (!Io_mgr._.ExistsFil(orig_url)) {
Io_mgr._.CopyFil(dflt_url, orig_url, true);
- Gfo_usr_dlg_._.Log_many("", "", "xowa_cfg_os generated; url=~{0}", orig_url.Raw());
+ Gfo_usr_dlg_.I.Log_many("", "", "xowa_cfg_os generated; url=~{0}", orig_url.Raw());
}
}
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Db_idx_mode.java b/400_xowa/src/gplx/xowa/bldrs/Db_idx_mode.java
similarity index 92%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/Db_idx_mode.java
rename to 400_xowa/src/gplx/xowa/bldrs/Db_idx_mode.java
index 6b4795b77..d8aa769ba 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Db_idx_mode.java
+++ b/400_xowa/src/gplx/xowa/bldrs/Db_idx_mode.java
@@ -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 .
*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+package gplx.xowa.bldrs; import gplx.*; import gplx.xowa.*;
public class Db_idx_mode {
private int tid;
Db_idx_mode(int tid) {this.tid = tid;}
diff --git a/400_xowa/src/gplx/xowa/bldrs/Db_mgr_fxt.java b/400_xowa/src/gplx/xowa/bldrs/Db_mgr_fxt.java
index d73dc9422..278a0cef8 100644
--- a/400_xowa/src/gplx/xowa/bldrs/Db_mgr_fxt.java
+++ b/400_xowa/src/gplx/xowa/bldrs/Db_mgr_fxt.java
@@ -17,17 +17,18 @@ along with this program. If not, see .
*/
package gplx.xowa.bldrs; import gplx.*; import gplx.xowa.*;
import gplx.core.primitives.*; import gplx.core.strings.*;
-import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.dbs.*; import gplx.xowa.specials.search.*; import gplx.xowa.ctgs.*; import gplx.xowa.dbs.tbls.*;
+import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.dbs.*; import gplx.xowa.specials.search.*; import gplx.xowa.ctgs.*;
+import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.bldrs.infos.*;
public class Db_mgr_fxt {
public Db_mgr_fxt Ctor_fsys() {bldr_fxt = new Xob_fxt().Ctor(Xoa_test_.Url_root().GenSubDir("root")); return this;}
public Db_mgr_fxt Ctor_mem() {bldr_fxt = new Xob_fxt().Ctor_mem(); return this;} private Xob_fxt bldr_fxt;
- public Xodb_page page_(int id, String modified_on, boolean type_redirect, int text_len) {return new Xodb_page().Id_(id).Modified_on_(DateAdp_.parse_gplx(modified_on)).Redirected_(type_redirect).Wtxt_len_(text_len);}
+ public Xowd_page_itm page_(int id, String modified_on, boolean type_redirect, int text_len) {return new Xowd_page_itm().Id_(id).Modified_on_(DateAdp_.parse_gplx(modified_on)).Redirected_(type_redirect).Text_len_(text_len);}
public Xowe_wiki Wiki() {return bldr_fxt.Wiki();}
public Xob_bldr Bldr() {return bldr_fxt.Bldr();}
- public Db_mgr_fxt doc_ary_(Xodb_page... v) {bldr_fxt.doc_ary_(v); return this;}
- public Xodb_page doc_(int id, String date, String title, String text) {return bldr_fxt.doc_(id, date, title, text);}
- public Xodb_page doc_wo_date_(int id, String title, String text) {return bldr_fxt.doc_(id, "2012-01-02 03:04", title, text);}
- public Xodb_page doc_ttl_(int id, String title) {return bldr_fxt.doc_(id, "2012-01-02 03:04", title, "IGNORE");}
+ public Db_mgr_fxt doc_ary_(Xowd_page_itm... v) {bldr_fxt.doc_ary_(v); return this;}
+ public Xowd_page_itm doc_(int id, String date, String title, String text) {return bldr_fxt.doc_(id, date, title, text);}
+ public Xowd_page_itm doc_wo_date_(int id, String title, String text) {return bldr_fxt.doc_(id, "2012-01-02 03:04", title, text);}
+ public Xowd_page_itm doc_ttl_(int id, String title) {return bldr_fxt.doc_(id, "2012-01-02 03:04", title, "IGNORE");}
public Db_mgr_fxt Init_fil(String url, String raw) {return Init_fil(Io_url_.new_fil_(url), raw);}
public Db_mgr_fxt Init_fil(Io_url url, String raw) {Io_mgr._.SaveFilStr(url, raw); return this;}
public Db_mgr_fxt Exec_run(Xobd_wkr wkr) {bldr_fxt.Run(wkr); return this;}
@@ -35,21 +36,19 @@ public class Db_mgr_fxt {
public Db_mgr_fxt Exec_run(Xobd_parser_wkr wkr) {bldr_fxt.Run(wkr); return this;}
public void Init_page_insert(Int_obj_ref page_id_next, int ns_id, String[] ttls) {
Xowe_wiki wiki = this.Wiki();
- 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().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++) {
- String ttl = ttls[i];
- int page_id = page_id_next.Val();
- tbl_page.Insert(stmt, page_id, ns_id, Bry_.new_utf8_(ttl), false, modified_on, 0, page_id, 0, 0);
- page_id_next.Val_add(1);
- }
- } finally {stmt.Rls();}
+ int len = ttls.length;
+ DateAdp modified_on = Tfds.Now_time0_add_min(0);
+ Xowd_page_tbl tbl_page = wiki.Db_mgr_as_sql().Core_data_mgr().Tbl__page();
+ tbl_page.Insert_bgn();
+ for (int i = 0; i < len; i++) {
+ String ttl = ttls[i];
+ int page_id = page_id_next.Val();
+ tbl_page.Insert_cmd_by_batch(page_id, ns_id, Bry_.new_utf8_(ttl), false, modified_on, 0, page_id, 0, 0);
+ page_id_next.Val_add(1);
+ }
+ tbl_page.Insert_end();
}
- public void Test_load_ttl(int ns_id, String ttl_str, Xodb_page expd) {
+ public void Test_load_ttl(int ns_id, String ttl_str, Xowd_page_itm expd) {
Xowe_wiki wiki = bldr_fxt.Wiki();
Xow_ns ns = wiki.Ns_mgr().Ids_get_or_null(ns_id);
byte[] ttl_bry = Bry_.new_ascii_(ttl_str);
@@ -57,13 +56,13 @@ public class Db_mgr_fxt {
Tfds.Eq(expd.Id(), actl.Id());
Tfds.Eq_date(expd.Modified_on(), actl.Modified_on());
Tfds.Eq(expd.Redirected(), actl.Redirected());
- Tfds.Eq(expd.Wtxt_len(), actl.Wtxt_len());
- } private Xodb_page actl = new Xodb_page();
+ Tfds.Eq(expd.Text_len(), actl.Text_len());
+ } private Xowd_page_itm actl = new Xowd_page_itm();
public void Test_load_page(int ns_id, int page_id, String expd) {
Xowe_wiki wiki = bldr_fxt.Wiki();
Xow_ns ns = wiki.Ns_mgr().Ids_get_or_null(ns_id);
wiki.Db_mgr_as_sql().Load_mgr().Load_page(actl.Id_(page_id), ns, false);
- Tfds.Eq(expd, String_.new_ascii_(actl.Wtxt()));
+ Tfds.Eq(expd, String_.new_ascii_(actl.Text()));
}
public void Test_search(String search_word_str, int... expd) {
Xowe_wiki wiki = bldr_fxt.Wiki();
@@ -76,7 +75,7 @@ public class Db_mgr_fxt {
int len = rslts.Count();
int[] rv = new int[len];
for (int i = 0; i < len; i++) {
- Xodb_page page = (Xodb_page)rslts.FetchAt(i);
+ Xowd_page_itm page = (Xowd_page_itm)rslts.FetchAt(i);
rv[i] = page.Id();
}
return rv;
@@ -125,23 +124,15 @@ public class Db_mgr_fxt {
}
return (int[])list.Xto_ary_and_clear(int.class);
}
- public void Init_db_sqlite() {Init_db_sqlite(Xoa_test_.Url_wiki_enwiki().GenSubFil_nest("en.wikipedia.org.sqlite3"));}
- public void Init_db_sqlite(Io_url url) {
+ public void Init_db_sqlite() {
Xowe_wiki wiki = this.Wiki();
Db_conn_pool.I.Clear();
- 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.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"));
- conn.Exec_qry(Db_qry_delete.new_all_("page"));
- conn.Exec_qry(Db_qry_delete.new_all_("text"));
- conn.Exec_qry(Db_qry_delete.new_all_("category"));
- conn.Exec_qry(Db_qry_delete.new_all_("categorylinks"));
+ Db_conn_bldr.I.Reg_default_sqlite();
+ Io_mgr._.DeleteDir_cmd(wiki.Fsys_mgr().Root_dir()).MissingIgnored_().Exec();
+ wiki.Db_mgr_create_as_sql().Core_data_mgr().Init_by_make(Xowd_core_db_props.Test, Xob_info_session.Test);
+ Io_mgr._.SaveFilStr(wiki.Import_cfg().Src_dir().GenSubFil("a.xml"), "");
}
public void Rls() {
- this.Wiki().Db_mgr().Rls();
+ this.Wiki().Db_mgr_as_sql().Core_data_mgr().Rls();
}
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/Xob_base_fxt.java b/400_xowa/src/gplx/xowa/bldrs/Xob_base_fxt.java
index 6ea0c4f2d..4c110d99a 100644
--- a/400_xowa/src/gplx/xowa/bldrs/Xob_base_fxt.java
+++ b/400_xowa/src/gplx/xowa/bldrs/Xob_base_fxt.java
@@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.bldrs; import gplx.*; import gplx.xowa.*;
-import gplx.ios.*; import gplx.xowa.bldrs.*;
+import gplx.ios.*; import gplx.xowa.bldrs.*; import gplx.xowa.wikis.data.tbls.*;
public class Xob_base_fxt {
public Xob_base_fxt Clear() {
if (app == null) {
@@ -34,8 +34,8 @@ public class Xob_base_fxt {
public Xob_bldr Bldr() {return bldr;} private Xob_bldr bldr;
public Xowe_wiki Wiki() {return wiki;} private Xowe_wiki wiki;
public GfoInvkAble Bldr_itm() {return bldr_itm;} GfoInvkAble bldr_itm;
- public Xodb_page page_(String ttl) {return page_(ttl, "");}
- public Xodb_page page_(String ttl, String text) {return new Xodb_page().Ttl_(Bry_.new_utf8_(ttl), wiki.Ns_mgr()).Wtxt_(Bry_.new_utf8_(text));}
+ public Xowd_page_itm page_(String ttl) {return page_(ttl, "");}
+ public Xowd_page_itm page_(String ttl, String text) {return new Xowd_page_itm().Ttl_(Bry_.new_utf8_(ttl), wiki.Ns_mgr()).Text_(Bry_.new_utf8_(text));}
public Io_fil_chkr meta_(String url, String data) {return new Io_fil_chkr(Io_url_.mem_fil_(url), data);}
public void Init_fxts(Xob_bldr bldr, Xowe_wiki wiki, Xob_base_fxt... fxt_ary) {
int fxt_ary_len = fxt_ary.length;
@@ -66,11 +66,11 @@ public class Xob_base_fxt {
cmd.Cmd_run();
cmd.Cmd_end();
}
- public static void Run_wkr(Xob_bldr bldr, Xobd_wkr wkr, Xodb_page[] page_ary) {
+ public static void Run_wkr(Xob_bldr bldr, Xobd_wkr wkr, Xowd_page_itm[] page_ary) {
wkr.Wkr_bgn(bldr);
int page_ary_len = page_ary.length;
for (int i = 0; i < page_ary_len; i++) {
- Xodb_page page = page_ary[i];
+ Xowd_page_itm page = page_ary[i];
wkr.Wkr_run(page);
}
wkr.Wkr_end();
diff --git a/400_xowa/src/gplx/xowa/bldrs/Xob_cmd.java b/400_xowa/src/gplx/xowa/bldrs/Xob_cmd.java
index ba04f927a..89d7f4fcd 100644
--- a/400_xowa/src/gplx/xowa/bldrs/Xob_cmd.java
+++ b/400_xowa/src/gplx/xowa/bldrs/Xob_cmd.java
@@ -18,9 +18,9 @@ along with this program. If not, see .
package gplx.xowa.bldrs; import gplx.*; import gplx.xowa.*;
public interface Xob_cmd extends GfoInvkAble {
String Cmd_key();
- void Cmd_ini(Xob_bldr bldr);
+ void Cmd_init(Xob_bldr bldr);
void Cmd_bgn(Xob_bldr bldr);
void Cmd_run();
void Cmd_end();
- void Cmd_print();
+ void Cmd_term();
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_keys.java b/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_keys.java
new file mode 100644
index 000000000..c8380284d
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_keys.java
@@ -0,0 +1,73 @@
+/*
+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 .
+*/
+package gplx.xowa.bldrs; import gplx.*; import gplx.xowa.*;
+public class Xob_cmd_keys {
+ public static final String
+ Key_text_init = "text.init" // "import.sql.init"
+ , Key_text_page = "text.page" // "import.sql.page"
+ , Key_text_css = "text.css"
+ , Key_text_search_cmd = "text.search.cmd" // "import.sql.search_title.cmd"
+ , Key_text_search_wkr = "text.search" // "import.sql.search_title.wkr"
+ , Key_text_cat_core_v1 = "text.cat.core.v1" // "import.sql.category_v1"
+ , Key_text_cat_core = "text.cat.core" // "import.sql.category_registry"
+ , Key_text_cat_link = "text.cat.link" // "import.sql.categorylinks"
+ , Key_text_cat_hidden = "text.cat.hidden" // "import.sql.hiddencat"
+ , Key_text_term = "text.term" // "import.sql.term"
+ , Key_wiki_redirect = "wiki.redirect" // "wiki.redirect"
+ , Key_wiki_image = "wiki.image" // "wiki.image"
+ , Key_wiki_page_dump_make = "wiki.page_dump.make" // "file.page_dump"
+ , Key_wiki_page_dump_drop = "wiki.page_dump.drop"
+ , Key_file_lnki_temp = "file.lnki_temp"
+ , Key_file_lnki_regy = "file.lnki_regy"
+ , Key_file_page_regy = "file.page_regy"
+ , Key_file_orig_regy = "file.orig_regy"
+ , Key_file_xfer_temp_thumb = "file.xfer_temp.thumb"
+ , Key_file_xfer_temp_orig = "file.xfer_temp.orig"
+ , Key_file_xfer_regy = "file.xfer_regy"
+ , Key_file_xfer_regy_update = "file.xfer_regy_update"
+ , Key_file_fsdb_make = "file.fsdb_make"
+ , Key_file_orig_reg = "file.orig_reg"
+ , Key_file_xfer_update = "file.xfer_update"
+ , Key_html_redlinks = "html.redlinks"
+ , Key_util_cleanup = "util.cleanup" // "core.cleanup"
+ , Key_util_download = "util.download" // "file.download"
+ , Key_wbase_qid = "wbase.qid" // "text.wdata.qid"
+ , Key_wbase_pid = "wbase.pid" // "text.wdata.pid"
+ , Key_wbase_db = "wbase.db" // "wiki.wdata_db"
+ , Key_tdb_text_init = "tdb.text.init" // "core.init"
+ , Key_tdb_make_page = "tdb.text.page" // "core.make_page"
+ , Key_tdb_make_id = "core.make_id"
+ , Key_tdb_make_search_title = "core.make_search_title"
+ , Key_tdb_make_category = "core.make_category"
+ , Key_tdb_calc_stats = "core.calc_stats"
+ , Key_tdb_core_term = "tdb.text.term" // "core.term"
+ , Key_tdb_text_cat_link = "ctg.link_sql"
+ , Key_tdb_ctg_link_idx = "ctg.link_idx"
+ , Key_tdb_cat_hidden_sql = "ctg.hiddencat_sql"
+ , Key_tdb_cat_hidden_ttl = "ctg.hiddencat_ttl"
+ , Key_tdb_text_wdata_qid = "tdb.text.wdata.qid"
+ , Key_tdb_text_wdata_pid = "tdb.text.wdata.pid"
+ , Key_diff_regy_exec = "file.diff_regy.exec"
+ , Key_diff_regy_make = "file.diff_regy.make"
+ , Key_exec_sql = "import.sql.exec_sql"
+ , Key_deploy_zip = "deploy.zip"
+ , Key_deploy_copy = "deploy.copy"
+ , Key_decompress_bz2 = "core.decompress_bz2"
+ ;
+}
+
\ No newline at end of file
diff --git a/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_mgr.java b/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_mgr.java
index 0f4c8e52f..601bef69a 100644
--- a/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_mgr.java
+++ b/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_mgr.java
@@ -17,10 +17,9 @@ along with this program. If not, see .
*/
package gplx.xowa.bldrs; import gplx.*; import gplx.xowa.*;
import gplx.core.primitives.*;
-import gplx.xowa.wikis.*; import gplx.xowa.xtns.wdatas.imports.*; import gplx.xowa.bldrs.imports.ctgs.*; import gplx.xowa.bldrs.imports.*; import gplx.xowa.bldrs.oimgs.*;
-import gplx.xowa.bldrs.wikis.redirects.*; import gplx.xowa.bldrs.wikis.images.*;
-import gplx.xowa.bldrs.files.*; import gplx.xowa.files.origs.*;
-import gplx.xowa.html.hdumps.bldrs.*;
+import gplx.xowa.wikis.*; import gplx.xowa.xtns.wdatas.imports.*;
+import gplx.xowa.bldrs.cmds.texts.*; import gplx.xowa.bldrs.cmds.texts.sqls.*; import gplx.xowa.bldrs.cmds.texts.tdbs.*; import gplx.xowa.bldrs.cmds.files.*; import gplx.xowa.bldrs.cmds.ctgs.*; import gplx.xowa.bldrs.cmds.utils.*; import gplx.xowa.bldrs.cmds.wikis.*;
+import gplx.xowa.files.origs.*; import gplx.xowa.html.hdumps.bldrs.*;
public class Xob_cmd_mgr implements GfoInvkAble {
public Xob_cmd_mgr(Xob_bldr bldr) {this.bldr = bldr;} private Xob_bldr bldr;
public void Clear() {list.Clear(); dump_rdrs.Clear();}
@@ -28,57 +27,57 @@ public class Xob_cmd_mgr implements GfoInvkAble {
public Xob_cmd Get_at(int i) {return (Xob_cmd)list.FetchAt(i);}
public Xob_cmd Add(Xob_cmd cmd) {list.Add(cmd); return cmd;}
public GfoInvkAble Add_cmd(Xowe_wiki wiki, String cmd_key) {
- if (String_.Eq(cmd_key, Xob_init_txt.KEY)) return Add(new Xob_init_txt(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_init_sql.KEY)) return Add(new Xob_init_sql(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_term_txt.KEY)) return Add(new Xob_term_txt(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_term_sql.KEY)) return Add(new Xob_term_sql(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_page_sql.KEY)) return Xml_rdr_direct_add(wiki, new Xob_page_sql(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_page_txt.KEY)) return Xml_rdr_direct_add(wiki, new Xob_page_txt(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_search_txt.KEY)) return Xml_rdr_direct_add(wiki, new Xob_search_txt(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_ctg_v1_txt.KEY)) return Xml_rdr_parser_add(wiki, new Xob_ctg_v1_txt().Ctor(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_ctg_v1_sql.KEY)) return Xml_rdr_parser_add(wiki, new Xob_ctg_v1_sql().Ctor(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_categorylinks_txt.KEY)) return Add(new Xob_categorylinks_txt(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_categorylinks_sql.KEY)) return Add(new Xob_categorylinks_sql(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_wdata_qid_txt.KEY)) return Xml_rdr_direct_add(wiki, new Xob_wdata_qid_txt().Ctor(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_wdata_qid_sql.KEY)) return Xml_rdr_direct_add(wiki, new Xob_wdata_qid_sql().Ctor(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_wdata_pid_txt.KEY)) return Xml_rdr_direct_add(wiki, new Xob_wdata_pid_txt().Ctor(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_wdata_pid_sql.KEY)) return Xml_rdr_direct_add(wiki, new Xob_wdata_pid_sql().Ctor(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_search_sql_wkr.KEY)) return Xml_rdr_direct_add(wiki, new Xob_search_sql_wkr(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_search_sql_cmd.KEY_search_sql)) return Add(new Xob_search_sql_cmd(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_category_registry_sql.KEY)) return Add(new Xob_category_registry_sql(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_lnki_temp_wkr.KEY_oimg)) return Add(new Xob_lnki_temp_wkr(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_lnki_regy_cmd.KEY_oimg)) return Add(new Xob_lnki_regy_cmd(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_text_db_prep.KEY_oimg)) return Add(new Xob_text_db_prep(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_orig_regy_cmd.KEY_oimg)) return Add(new Xob_orig_regy_cmd(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_xfer_temp_cmd_thumb.KEY_oimg)) return Add(new Xob_xfer_temp_cmd_thumb(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_xfer_temp_cmd_orig.KEY_oimg)) return Add(new Xob_xfer_temp_cmd_orig(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_xfer_regy_cmd.KEY_oimg)) return Add(new Xob_xfer_regy_cmd(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_xfer_regy_update_cmd.KEY_oimg)) return Add(new Xob_xfer_regy_update_cmd(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_xfer_update_cmd.KEY_oimg)) return Add(new Xob_xfer_update_cmd(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_diff_regy_exec_cmd.KEY_oimg)) return Add(new Xob_diff_regy_exec_cmd(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_diff_regy_make_cmd.KEY_oimg)) return Add(new Xob_diff_regy_make_cmd(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_orig_tbl_bldr.KEY_oimg)) return Add(new Xob_orig_tbl_bldr(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_download_wkr.KEY_oimg)) return Add(new Xob_download_wkr(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_page_regy_cmd.KEY_oimg)) return Add(new Xob_page_regy_cmd(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_cmd_exec_sql.KEY)) return Add(new Xob_cmd_exec_sql(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_rl_regy_cmd.Cmd_key_const)) return Add(new Xob_rl_regy_cmd(bldr, wiki));
-
- else if (String_.Eq(cmd_key, Xob_redirect_cmd.KEY_redirect)) return Add(new Xob_redirect_cmd(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_wiki_image_sql.KEY)) return Add(new Xob_wiki_image_sql(bldr, wiki));
-
- else if (String_.Eq(cmd_key, Xob_fsdb_make.KEY_oimg)) return Add(new Xob_fsdb_make(bldr, wiki));
- else if (String_.Eq(cmd_key, Xob_wdata_db_cmd.KEY_oimg)) return Add(new Xob_wdata_db_cmd(bldr, wiki));
- else if (String_.Eq(cmd_key, Xoctg_link_idx_wkr.KEY)) return Add(new Xoctg_link_idx_wkr(bldr, wiki));
- else if (String_.Eq(cmd_key, Xoctg_hiddencat_parser_sql.KEY)) return Add(new Xoctg_hiddencat_parser_sql(bldr, wiki));
- else if (String_.Eq(cmd_key, Xoctg_hiddencat_parser_txt.KEY)) return Add(new Xoctg_hiddencat_parser_txt(bldr, wiki));
- else if (String_.Eq(cmd_key, Xoctg_hiddencat_ttl_wkr.KEY)) return Add(new Xoctg_hiddencat_ttl_wkr(bldr, wiki));
- else if (String_.Eq(cmd_key, Xobc_core_make_id.KEY)) return Xml_rdr_direct_add(wiki, new Xobc_core_make_id(bldr, wiki));
- else if (String_.Eq(cmd_key, Xobc_core_calc_stats.KEY)) return Add(new Xobc_core_calc_stats(bldr, wiki));
- else if (String_.Eq(cmd_key, Xobc_core_cleanup.KEY)) return Add(new Xobc_core_cleanup(bldr, wiki));
- else if (String_.Eq(cmd_key, Xobc_core_decompress_bz.KEY)) return Add(new Xobc_core_decompress_bz(bldr, wiki));
- else if (String_.Eq(cmd_key, Xobc_deploy_zip.KEY)) return Add(new Xobc_deploy_zip(bldr, wiki));
- else if (String_.Eq(cmd_key, Xobc_deploy_copy.KEY)) return Add(new Xobc_deploy_copy(bldr, wiki));
- else throw Err_.unhandled(cmd_key);
+ if (String_.Eq(cmd_key, Xob_cmd_keys.Key_text_init)) return Add(new Xob_init_cmd(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_text_page)) return Xml_rdr_direct_add(wiki, new Xob_page_cmd(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_text_css)) return Add(new Xob_css_cmd(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_text_search_wkr)) return Xml_rdr_direct_add(wiki, new Xob_search_sql_wkr(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_text_search_cmd)) return Add(new Xob_search_sql_cmd(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_text_cat_core_v1)) return Xml_rdr_parser_add(wiki, new Xob_ctg_v1_sql().Ctor(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_text_cat_core)) return Add(new Xob_category_registry_sql(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_text_cat_link)) return Add(new Xob_categorylinks_sql(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_text_cat_hidden)) return Add(new Xoctg_hiddencat_parser_sql(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_text_term)) return Add(new Xob_term_cmd(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_wiki_page_dump_make)) return Add(new Xob_page_dump_cmd_make(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_wiki_page_dump_drop)) return Add(new Xob_page_dump_cmd_drop(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_wiki_redirect)) return Add(new Xob_redirect_cmd(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_wiki_image)) return Add(new Xob_image_cmd(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_file_lnki_temp)) return Add(new Xob_lnki_temp_wkr(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_file_lnki_regy)) return Add(new Xob_lnki_regy_cmd(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_file_page_regy)) return Add(new Xob_page_regy_cmd(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_file_orig_regy)) return Add(new Xob_orig_regy_cmd(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_file_xfer_temp_thumb)) return Add(new Xob_xfer_temp_cmd_thumb(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_file_xfer_temp_orig)) return Add(new Xob_xfer_temp_cmd_orig(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_file_xfer_regy)) return Add(new Xob_xfer_regy_cmd(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_file_xfer_regy_update)) return Add(new Xob_xfer_regy_update_cmd(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_file_fsdb_make)) return Add(new Xob_fsdb_make_cmd(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_file_orig_reg)) return Add(new Xob_orig_tbl_bldr(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_file_xfer_update)) return Add(new Xob_xfer_update_cmd(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_html_redlinks)) return Add(new Xob_redlink_mkr_cmd(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_util_cleanup)) return Add(new Xob_cleanup_cmd(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_util_download)) return Add(new Xob_download_wkr(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_wbase_qid)) return Xml_rdr_direct_add(wiki, new Xob_wdata_qid_sql().Ctor(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_wbase_pid)) return Xml_rdr_direct_add(wiki, new Xob_wdata_pid_sql().Ctor(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_wbase_db)) return Add(new Xob_wdata_db_cmd(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_tdb_text_init)) return Add(new Xob_init_tdb(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_tdb_make_page)) return Xml_rdr_direct_add(wiki, new Xob_page_txt(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_tdb_make_id)) return Xml_rdr_direct_add(wiki, new Xob_make_id_wkr(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_tdb_make_search_title)) return Xml_rdr_direct_add(wiki, new Xob_search_tdb(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_tdb_make_category)) return Xml_rdr_parser_add(wiki, new Xob_ctg_v1_txt().Ctor(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_tdb_calc_stats)) return Add(new Xob_calc_stats_cmd(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_tdb_text_cat_link)) return Add(new Xob_categorylinks_txt(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_tdb_ctg_link_idx)) return Add(new Xoctg_link_idx_wkr(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_tdb_cat_hidden_sql)) return Add(new Xoctg_hiddencat_parser_txt(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_tdb_cat_hidden_ttl)) return Add(new Xoctg_hiddencat_ttl_wkr(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_tdb_core_term)) return Add(new Xob_term_txt(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_tdb_text_wdata_qid)) return Xml_rdr_direct_add(wiki, new Xob_wdata_qid_txt().Ctor(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_tdb_text_wdata_pid)) return Xml_rdr_direct_add(wiki, new Xob_wdata_pid_txt().Ctor(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_diff_regy_exec)) return Add(new Xob_diff_regy_exec_cmd(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_diff_regy_make)) return Add(new Xob_diff_regy_make_cmd(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_exec_sql)) return Add(new Xob_exec_sql_cmd(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_decompress_bz2)) return Add(new Xob_decompress_bz2_cmd(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_deploy_zip)) return Add(new Xob_deploy_zip_cmd(bldr, wiki));
+ else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_deploy_copy)) return Add(new Xob_deploy_copy_cmd(bldr, wiki));
+ else throw Err_.unhandled(cmd_key);
}
private Xobd_wkr Xml_rdr_direct_add(Xowe_wiki wiki, Xobd_wkr wkr) {
Xobd_rdr dump_rdr = Xml_rdr_get(wiki);
@@ -105,7 +104,7 @@ public class Xob_cmd_mgr implements GfoInvkAble {
if (ctx.Match(k, Invk_add)) return Add_cmd(Wiki_get_or_make(m), m.ReadStr("v"));
else if (ctx.Match(k, Invk_add_many)) return Add_many(m);
else if (ctx.Match(k, Invk_get_first)) return Get_first(m);
- else if (ctx.Match(k, Invk_new_batch)) return new Xobc_core_batch(bldr, m.ReadBry("v"));
+ else if (ctx.Match(k, Invk_new_batch)) return new Xob_core_batch_utl(bldr, m.ReadBry("v"));
else return GfoInvkAble_.Rv_unhandled;
}
private static final String Invk_add = "add", Invk_add_many = "add_many", Invk_new_batch = "new_batch", Invk_get_first = "get_first";
diff --git a/400_xowa/src/gplx/xowa/bldrs/Xob_db_file.java b/400_xowa/src/gplx/xowa/bldrs/Xob_db_file.java
new file mode 100644
index 000000000..9fa2e6f83
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/bldrs/Xob_db_file.java
@@ -0,0 +1,48 @@
+/*
+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 .
+*/
+package gplx.xowa.bldrs; import gplx.*; import gplx.xowa.*;
+import gplx.dbs.*; import gplx.dbs.cfgs.*;
+public class Xob_db_file {
+ Xob_db_file(Io_url url, Db_conn conn) {
+ this.url = url; this.conn = conn;
+ this.tbl__cfg = new Db_cfg_tbl(conn, "xowa_cfg");
+ }
+ public Io_url Url() {return url;} private final Io_url url;
+ public Db_conn Conn() {return conn;} private final Db_conn conn;
+ public Db_cfg_tbl Tbl__cfg() {return tbl__cfg;} private final Db_cfg_tbl tbl__cfg;
+
+ public static Xob_db_file new__file_make(Io_url dir) {return new_(dir, Name__file_make);}
+ public static Xob_db_file new__page_regy(Io_url dir) {return new_(dir, Name__page_regy);}
+ public static Xob_db_file new__wiki_image(Io_url dir) {return new_(dir, Name__wiki_image);}
+ public static Xob_db_file new__wiki_redirect(Io_url dir) {return new_(dir, Name__wiki_redirect);}
+ public static Xob_db_file new__temp_log(Io_url dir) {return new_(dir, Name__temp_log);}
+ public static Xob_db_file new_(Io_url dir, String name) {
+ Io_url url = dir.GenSubFil(name);
+ Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new(url);
+ Db_conn conn = conn_data.Conn();
+ Xob_db_file rv = new Xob_db_file(url, conn);
+ if (conn_data.Created())
+ rv.Tbl__cfg().Create_tbl();
+ return rv;
+ }
+ public static final String
+ Name__wiki_image = "xowa.wiki.image.sqlite3", Name__wiki_redirect = "xowa.wiki.redirect.sqlite3"
+ , Name__file_make = "xowa.file.make.sqlite3", Name__temp_log = "xowa.temp.log.sqlite3"
+ , Name__page_regy = "xowa.file.page_regy.sqlite3"
+ ;
+}
diff --git a/400_xowa/src/gplx/xowa/bldrs/Xob_fxt.java b/400_xowa/src/gplx/xowa/bldrs/Xob_fxt.java
index d08097f16..c701839fc 100644
--- a/400_xowa/src/gplx/xowa/bldrs/Xob_fxt.java
+++ b/400_xowa/src/gplx/xowa/bldrs/Xob_fxt.java
@@ -16,13 +16,14 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.bldrs; import gplx.*; import gplx.xowa.*;
-import gplx.ios.*; import gplx.xowa.tdbs.*;
+import gplx.ios.*; import gplx.dbs.*; import gplx.xowa.tdbs.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.bldrs.cmds.texts.tdbs.*;
public class Xob_fxt {
public Xob_fxt Ctor_mem() {
Io_mgr._.InitEngine_mem();
return Ctor(Io_url_.mem_dir_("mem/xowa/"));
}
public Xob_fxt Ctor(Io_url root_dir) {
+ Db_conn_bldr.I.Reg_default_sqlite();
app = Xoa_app_fxt.app_("linux", root_dir);
wiki = Xoa_app_fxt.wiki_tst_(app);
bldr = Xoa_app_fxt.bldr_(app);
@@ -38,7 +39,7 @@ public class Xob_fxt {
public Io_url fil_site_ctg(int idx) {return wiki.Tdb_fsys_mgr().Url_site_fil(Xotdb_dir_info_.Tid_category, idx);}
public Io_url fil_site_id(int idx) {return wiki.Tdb_fsys_mgr().Url_site_fil(Xotdb_dir_info_.Tid_id, idx);}
public Io_url fil_reg(byte tid) {return wiki.Tdb_fsys_mgr().Url_site_reg(tid);}
- public Io_url fil_reg(int ns_id, byte tid) {return wiki.Tdb_fsys_mgr().Url_ns_reg(Int_.Xto_str_pad_bgn(ns_id, 3), tid);}
+ public Io_url fil_reg(int ns_id, byte tid) {return wiki.Tdb_fsys_mgr().Url_ns_reg(Int_.Xto_str_pad_bgn_zero(ns_id, 3), tid);}
public Xob_fxt Fil_expd(Io_url url, String... expd) {
String text = String_.Concat_lines_nl_skip_last(expd); // skipLast b/c if trailing line wanted, easier to pass in extra argument for ""
expd_list.Add(new Io_fil_chkr(url, text));
@@ -49,10 +50,10 @@ public class Xob_fxt {
skip_list.Add(urls[i]);
return this;
} ListAdp skip_list = ListAdp_.new_();
- public Xob_fxt doc_ary_(Xodb_page... v) {doc_ary = v; return this;} private Xodb_page[] doc_ary;
- public Xodb_page doc_wo_date_(int id, String title, String text) {return doc_(id, "2012-01-02 13:14", title, text);}
- public Xodb_page doc_(int id, String date, String title, String text) {
- Xodb_page rv = new Xodb_page().Id_(id).Ttl_(Bry_.new_utf8_(title), wiki.Ns_mgr()).Wtxt_(Bry_.new_utf8_(text));
+ public Xob_fxt doc_ary_(Xowd_page_itm... v) {doc_ary = v; return this;} private Xowd_page_itm[] doc_ary;
+ public Xowd_page_itm doc_wo_date_(int id, String title, String text) {return doc_(id, "2012-01-02 13:14", title, text);}
+ public Xowd_page_itm doc_(int id, String date, String title, String text) {
+ Xowd_page_itm rv = new Xowd_page_itm().Id_(id).Ttl_(Bry_.new_utf8_(title), wiki.Ns_mgr()).Text_(Bry_.new_utf8_(text));
int[] modified_on = new int[7];
dateParser.Parse_iso8651_like(modified_on, date);
rv.Modified_on_(DateAdp_.seg_(modified_on));
@@ -60,21 +61,21 @@ public class Xob_fxt {
}
public Xob_fxt Run_ctg() {
Xobd_parser parser = new Xobd_parser();
- gplx.xowa.bldrs.imports.ctgs.Xob_ctg_v1_base ctg_wkr = new gplx.xowa.bldrs.imports.ctgs.Xob_ctg_v1_txt().Ctor(bldr, wiki);
+ gplx.xowa.bldrs.cmds.ctgs.Xob_ctg_v1_base ctg_wkr = new gplx.xowa.bldrs.cmds.ctgs.Xob_ctg_v1_txt().Ctor(bldr, wiki);
byte[] bry = Bry_.new_utf8_("[[Category:");
ctg_wkr.Wkr_hooks().Add(bry, bry);
parser.Wkr_add(ctg_wkr);
return Run(parser);
}
public Xob_fxt Run_id() {
- gplx.xowa.bldrs.imports.Xobc_core_make_id wkr = new gplx.xowa.bldrs.imports.Xobc_core_make_id(bldr, wiki);
+ Xob_make_id_wkr wkr = new Xob_make_id_wkr(bldr, wiki);
Run(wkr);
return this;
}
private void Run_wkr(Xobd_wkr wkr) {
wkr.Wkr_bgn(bldr);
for (int i = 0; i < doc_ary.length; i++) {
- Xodb_page page = doc_ary[i];
+ Xowd_page_itm page = doc_ary[i];
wkr.Wkr_run(page);
}
wkr.Wkr_end();
@@ -95,12 +96,12 @@ public class Xob_fxt {
return rv;
}
public Xob_fxt Run_tmpl_dump() {
- Xobc_parse_dump_templates wkr = new Xobc_parse_dump_templates(bldr, wiki);
+ Xob_parse_dump_templates_cmd wkr = new Xob_parse_dump_templates_cmd(bldr, wiki);
Run_wkr(wkr);
tst_fils(wkr.Dump_url_gen().Prv_urls());
return this;
}
- public Xob_fxt Run_page_title() {return Run(new gplx.xowa.bldrs.imports.Xob_page_txt(bldr, wiki));}
+ public Xob_fxt Run_page_title() {return Run(new gplx.xowa.bldrs.cmds.texts.tdbs.Xob_page_txt(bldr, wiki));}
public Xob_fxt Run(Xobd_parser_wkr... wkrs) {
Xobd_parser parser_wkr = new Xobd_parser();
int len = wkrs.length;
@@ -115,7 +116,7 @@ public class Xob_fxt {
Xobd_wkr wkr = wkrs[j];
wkr.Wkr_bgn(bldr);
for (int i = 0; i < doc_ary_len; i++) {
- Xodb_page page = doc_ary[i];
+ Xowd_page_itm page = doc_ary[i];
wkr.Wkr_run(page);
}
wkr.Wkr_end();
diff --git a/400_xowa/src/gplx/xowa/bldrs/Xob_ns_to_db_mgr.java b/400_xowa/src/gplx/xowa/bldrs/Xob_ns_to_db_mgr.java
new file mode 100644
index 000000000..b3947acd7
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/bldrs/Xob_ns_to_db_mgr.java
@@ -0,0 +1,88 @@
+/*
+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 .
+*/
+package gplx.xowa.bldrs; import gplx.*; import gplx.xowa.*;
+import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.bldrs.cmds.*;
+public class Xob_ns_to_db_mgr {
+ private final Xob_ns_to_db_wkr wkr; private final Xowd_db_mgr db_mgr; private final long db_max; private boolean one_file_conn_init = true;
+ private final OrderedHash db_list = OrderedHash_.new_();
+ public Xob_ns_to_db_mgr(Xob_ns_to_db_wkr wkr, Xowd_db_mgr db_mgr, long db_max) {
+ this.wkr = wkr; this.db_mgr = db_mgr; this.db_max = db_max;
+ }
+ public Xowd_db_file Get_by_ns(Xob_ns_file_itm ns_file_itm, int data_len) {
+ Xowd_db_file rv = null;
+ if (wkr.Db_tid() == Xowd_db_file_.Tid_text && db_mgr.Props().Layout_text().Tid_is_all_or_few()) {
+ rv = db_mgr.Db__core();
+ if (one_file_conn_init) {
+ one_file_conn_init = false;
+ Init_tbl(rv);
+ }
+ }
+ else if (wkr.Db_tid() == Xowd_db_file_.Tid_html_data && db_mgr.Props().Layout_html().Tid_is_all_or_few()) {
+ if (one_file_conn_init) {
+ one_file_conn_init = false;
+ rv = db_mgr.Dbs__make_by_tid(wkr.Db_tid());
+ Init_tbl(rv);
+ }
+ else
+ rv = db_mgr.Db__html();
+ }
+ else {
+ int db_id = ns_file_itm.Nth_db_id();
+ if (db_id == Xob_ns_file_itm.Nth_db_id_null) // ns not assigned yet to db
+ rv = Init_db(ns_file_itm);
+ else
+ rv = db_mgr.Dbs__get_at(db_id);
+ long file_len = rv.File_len();
+ if (file_len + data_len > db_max) { // file is "full"
+ Term_tbl(rv);
+ rv = Init_db(ns_file_itm);
+ }
+ }
+ rv.File_len_add(data_len);
+ return rv;
+ }
+ private Xowd_db_file Init_db(Xob_ns_file_itm ns_file_itm) {
+ Xowd_db_file rv = db_mgr.Dbs__make_by_tid(ns_file_itm.Db_file_tid(), Int_.Xto_str(ns_file_itm.Ns_ids(), "|"), ns_file_itm.Nth_db_idx(), ns_file_itm.Make_file_name());
+ ns_file_itm.Nth_db_id_(rv.Id());
+ Init_tbl(rv);
+ return rv;
+ }
+ private void Init_tbl(Xowd_db_file db) {
+ wkr.Tbl_init(db);
+ db_list.Add(db.Id(), db);
+ }
+ private void Term_tbl(Xowd_db_file db) {
+ wkr.Tbl_term(db);
+ db_list.Del(db.Id());
+ }
+ public void Rls_all() {
+ Xowd_db_file[] ary = (Xowd_db_file[])db_list.Xto_ary(Xowd_db_file.class);
+ int len = ary.length;
+ for (int i = 0; i < len; ++i) {
+ Xowd_db_file db = (Xowd_db_file)ary[i];
+ Term_tbl(db); // SQLITE:1_TXN; may call close on db where txn is already closed
+ }
+ }
+ public void Commit() {
+ int len = db_list.Count();
+ for (int i = 0; i < len; ++i) {
+ Xowd_db_file db = (Xowd_db_file)db_list.FetchAt(i);
+ db.Conn().Txn_sav();
+ }
+ }
+}
diff --git a/400_xowa/src/gplx/xowa/wikis/data/Xowd_db_init_db_wkr.java b/400_xowa/src/gplx/xowa/bldrs/Xob_ns_to_db_wkr.java
similarity index 76%
rename from 400_xowa/src/gplx/xowa/wikis/data/Xowd_db_init_db_wkr.java
rename to 400_xowa/src/gplx/xowa/bldrs/Xob_ns_to_db_wkr.java
index 2ed4ba18f..6324d8cad 100644
--- a/400_xowa/src/gplx/xowa/wikis/data/Xowd_db_init_db_wkr.java
+++ b/400_xowa/src/gplx/xowa/bldrs/Xob_ns_to_db_wkr.java
@@ -15,8 +15,10 @@ 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 .
*/
-package gplx.xowa.wikis.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*;
-public interface Xowd_db_init_db_wkr {
- byte Db_tid();
- Xowd_db_file Db_make(Xowe_core_data_mgr core_data_mgr);
+package gplx.xowa.bldrs; import gplx.*; import gplx.xowa.*;
+import gplx.xowa.wikis.data.*;
+public interface Xob_ns_to_db_wkr {
+ byte Db_tid();
+ void Tbl_init(Xowd_db_file db);
+ void Tbl_term(Xowd_db_file db);
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_dump_mgr_base.java b/400_xowa/src/gplx/xowa/bldrs/cmds/Xob_dump_mgr_base.java
similarity index 84%
rename from 400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_dump_mgr_base.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/Xob_dump_mgr_base.java
index e86ad2800..8b390e3ea 100644
--- a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_dump_mgr_base.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/Xob_dump_mgr_base.java
@@ -15,12 +15,12 @@ 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 .
*/
-package gplx.xowa.bldrs.oimgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-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.*;
+package gplx.xowa.bldrs.cmds; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+import gplx.dbs.*; import gplx.xowa.wikis.caches.*; import gplx.xowa.bldrs.cmds.files.*; import gplx.xowa.files.origs.*;
+import gplx.xowa.wikis.data.*; import gplx.xowa.dbs.*; import gplx.xowa.wikis.data.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 Xowe_core_data_mgr db_fsys_mgr; protected Xop_parser parser; protected Xop_ctx ctx; protected Xop_root_tkn root;
+ private Xowd_db_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;
@@ -39,10 +39,11 @@ public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xo
parser = wiki.Parser();
ctx = wiki.Ctx();
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)
+ wiki.Init_assert(); // NOTE: must init wiki for db_mgr_as_sql
+ wiki.Db_mgr_as_sql().Core_data_mgr().Init_by_load(gplx.xowa.wikis.Xow_fsys_mgr.Find_core_fil(wiki)); // NOTE: must reinit providers as previous steps may have rls'd (and left member variable conn which is closed)
+ wiki.File_mgr__orig_mgr().Wkrs_del(Xof_orig_wkr_.Tid_wmf_api);
db_fsys_mgr = wiki.Db_mgr_as_sql().Core_data_mgr();
- db_ary = Xob_dump_src_ttl.Init_text_files_ary(db_fsys_mgr);
+ db_ary = Xob_dump_mgr_base_.Init_text_files_ary(db_fsys_mgr);
poll_interval = poll_mgr.Poll_interval();
page_src = new Xob_dump_src_id().Init(wiki, this.Init_redirect(), select_size);
@@ -81,13 +82,13 @@ public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xo
continue;
}
dump_bmk.Ns_id_(ns_id);
- Exec_db_ary(dump_bmk, ns_id);
+ Exec_db_ary(i, dump_bmk, ns_id);
if (ns_id == ns_end) exit_now = true; // ns_end set; exit
if (exit_now) break; // exit_now b/c of pg_bgn, db_bgn or something else
}
Exec_commit(dump_bmk.Ns_id(), dump_bmk.Db_id(), dump_bmk.Pg_id(), Bry_.Empty);
}
- private void Exec_db_ary(Xob_dump_bmk dump_bmk, int ns_id) {
+ private void Exec_db_ary(int ns_ord, Xob_dump_bmk dump_bmk, int ns_id) {
int db_ary_len = db_ary.length;
for (int i = 0; i < db_ary_len; i++) {
int db_id = db_ary[i].Id();
@@ -98,12 +99,12 @@ public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xo
continue;
}
dump_bmk.Db_id_(db_id);
- Exec_db_itm(dump_bmk, ns_id, db_id);
+ Exec_db_itm(dump_bmk, ns_ord, ns_id, db_id);
if (db_id == db_end) exit_now = true; // db_end set; exit;
if (exit_now) return; // exit_now b/c of pg_bgn, db_bgn or something else
}
}
- private void Exec_db_itm(Xob_dump_bmk dump_bmk, int ns_id, int db_id) {
+ private void Exec_db_itm(Xob_dump_bmk dump_bmk, int ns_ord, int ns_id, int db_id) {
ListAdp pages = ListAdp_.new_();
Xow_ns ns = wiki.Ns_mgr().Ids_get_or_null(ns_id);
int pg_id = pg_bgn;
@@ -117,9 +118,9 @@ public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xo
}
usr_dlg.Prog_many("", "", "fetched pages: ~{0}", pages_len);
for (int i = 0; i < pages_len; i++) {
- Xodb_page page = (Xodb_page)pages.FetchAt(i);
+ Xowd_page_itm page = (Xowd_page_itm)pages.FetchAt(i);
dump_bmk.Pg_id_(pg_id);
- Exec_pg_itm(ns, db_id, page);
+ Exec_pg_itm(ns_ord, ns, db_id, page);
if ( pg_id >= pg_end
|| exec_count >= exec_count_max) {
exit_now = true;
@@ -129,14 +130,14 @@ public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xo
}
}
}
- private void Exec_pg_itm(Xow_ns ns, int db_id, Xodb_page page) {
+ private void Exec_pg_itm(int ns_ord, Xow_ns ns, int db_id, Xowd_page_itm page) {
try {
if ((exec_count % progress_interval) == 0)
usr_dlg.Prog_many("", "", "parsing: ns=~{0} db=~{1} pg=~{2} count=~{3} time=~{4} rate=~{5} ttl=~{6}"
, ns.Id(), db_id, page.Id(), exec_count
, Env_.TickCount_elapsed_in_sec(time_bgn), rate_mgr.Rate_as_str(), String_.new_utf8_(page.Ttl_page_db()));
ctx.Clear();
- Exec_pg_itm_hook(ns, page, page.Wtxt());
+ Exec_pg_itm_hook(ns_ord, ns, page, page.Text());
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();
@@ -155,7 +156,7 @@ public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xo
this.Free();
}
}
- public abstract void Exec_pg_itm_hook(Xow_ns ns, Xodb_page page, byte[] page_text);
+ public abstract void Exec_pg_itm_hook(int ns_ord, Xow_ns ns, Xowd_page_itm page, byte[] page_text);
private void Exec_commit(int ns_id, int db_id, int pg_id, byte[] ttl) {
usr_dlg.Prog_many("", "", "committing: ns=~{0} db=~{1} pg=~{2} count=~{3} ttl=~{4}", ns_id, db_id, pg_id, exec_count, String_.new_utf8_(ttl));
Exec_commit_hook();
@@ -164,8 +165,8 @@ public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xo
}
public abstract void Exec_commit_hook();
public abstract void Exec_end_hook();
- public void Cmd_ini(Xob_bldr bldr) {}
- public void Cmd_print() {}
+ public void Cmd_init(Xob_bldr bldr) {}
+ public void Cmd_term() {}
public void Cmd_end() {
if (!exit_now)
pg_bgn = Int_.MaxValue;
@@ -226,11 +227,11 @@ class Xob_dump_mgr_base_ {
page_src.Get_pages(pages, 0, Xow_ns_.Id_template, cur_page_id); // 0 is always template db
int page_count = pages.Count();
if (page_count == 0) break; // no more pages in db;
- Xodb_page page = null;
+ Xowd_page_itm page = null;
for (int i = 0; i < page_count; i++) {
- page = (Xodb_page)pages.FetchAt(i);
+ page = (Xowd_page_itm)pages.FetchAt(i);
Xot_defn_tmpl defn = new Xot_defn_tmpl();
- defn.Init_by_new(ns_tmpl, ns_tmpl.Gen_ttl(page.Ttl_page_db()), page.Wtxt(), null, false); // NOTE: passing null, false; will be overriden later when Parse is called
+ defn.Init_by_new(ns_tmpl, ns_tmpl.Gen_ttl(page.Ttl_page_db()), page.Text(), null, false); // NOTE: passing null, false; will be overriden later when Parse is called
defn_cache.Add(defn, ns_tmpl.Case_match());
++load_count;
if ((load_count % 10000) == 0) usr_dlg.Prog_many("", "", "tmpl_loading: ~{0}", load_count);
@@ -239,6 +240,17 @@ class Xob_dump_mgr_base_ {
}
usr_dlg.Note_many("", "", "tmpl_load done: ~{0}", load_count);
}
+ public static Xowd_db_file[] Init_text_files_ary(Xowd_db_mgr core_data_mgr) {
+ ListAdp text_files_list = ListAdp_.new_();
+ 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++) {
+ 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 (Xowd_db_file[])text_files_list.Xto_ary_and_clear(Xowd_db_file.class);
+ }
}
class Xob_dump_bmk_mgr {
private Bry_bfr save_bfr = Bry_bfr.reset_(1024);
diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/Xob_ns_file_itm.java b/400_xowa/src/gplx/xowa/bldrs/cmds/Xob_ns_file_itm.java
new file mode 100644
index 000000000..96f3d334a
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/Xob_ns_file_itm.java
@@ -0,0 +1,63 @@
+/*
+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 .
+*/
+package gplx.xowa.bldrs.cmds; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+import gplx.xowa.wikis.data.*;
+public class Xob_ns_file_itm {
+ public Xob_ns_file_itm(byte db_file_tid, String file_name, int[] ns_ids) {
+ this.db_file_tid = db_file_tid; this.file_name = file_name; this.ns_ids = ns_ids;
+ this.nth_db_id = Nth_db_id_null; this.nth_db_idx = 1;
+ }
+ public byte Db_file_tid() {return db_file_tid;} private final byte db_file_tid;
+ public String File_name() {return file_name;} private final String file_name;
+ public int[] Ns_ids() {return ns_ids;} private final int[] ns_ids;
+ public int Nth_db_id() {return nth_db_id;} public void Nth_db_id_(int v) {nth_db_id = v;} private int nth_db_id;
+ public int Nth_db_idx() {return nth_db_idx;} private int nth_db_idx;
+ public String Make_file_name() { // EX: en.wikipedia.org-text-ns.000-001.xowa
+ String rv = String_.Format("-{0}{1}{2}.xowa" // EX: -text-ns.000-db.001.xowa
+ , Xowd_db_file_.To_key(db_file_tid) // text
+ , String_.Len_eq_0(file_name) ? "" : "-" + file_name // if empty, don't add "ns.000" segment; produces en.wikipedia.org-text-001.xowa
+ , nth_db_idx == 1 ? "" : "-db." + Int_.Xto_str_pad_bgn_zero(nth_db_idx, 3) // "-db.001"
+ );
+ ++nth_db_idx;
+ return rv;
+ }
+ public static final int Nth_db_id_null = -1;
+
+ public static void Init_ns_bldr_data(byte db_file_tid, Xow_ns_mgr ns_mgr, byte[] ns_file_map) {
+ int ns_len = ns_mgr.Ords_len();
+ Xob_ns_file_itm ns_file_itm_default = new Xob_ns_file_itm(db_file_tid, "", null);
+ for (int i = 0; i < ns_len; ++i) {
+ Xow_ns ns = ns_mgr.Ords_get_at(i);
+ ns.Bldr_data_(ns_file_itm_default);
+ }
+ Xob_ns_file_itm_parser ns_itm_parser = new Xob_ns_file_itm_parser();
+ ns_itm_parser.Ctor(db_file_tid, ns_mgr);
+ Xob_ns_file_itm[] ns_itm_ary = ns_itm_parser.To_ary(ns_file_map);
+ int ns_itm_ary_len = ns_itm_ary.length;
+ for (int i = 0; i < ns_itm_ary_len; ++i) {
+ Xob_ns_file_itm itm = ns_itm_ary[i];
+ int[] ns_ids = itm.Ns_ids();
+ int ns_ids_len = ns_ids.length;
+ 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_data_(itm);
+ }
+ }
+ }
+}
diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/Xob_ns_file_itm_parser.java b/400_xowa/src/gplx/xowa/bldrs/cmds/Xob_ns_file_itm_parser.java
new file mode 100644
index 000000000..fdb65d9d5
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/Xob_ns_file_itm_parser.java
@@ -0,0 +1,79 @@
+/*
+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 .
+*/
+package gplx.xowa.bldrs.cmds; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+import gplx.srls.dsvs.*;
+public class Xob_ns_file_itm_parser extends Dsv_wkr_base {
+ private byte[] ns_ids_bry; private String name; private final ListAdp rslts = ListAdp_.new_();
+ private Xow_ns_mgr ns_mgr; private byte db_file_tid; private boolean mode_each = false;
+ public void Ctor(byte db_file_tid, Xow_ns_mgr ns_mgr) {
+ this.db_file_tid = db_file_tid; this.ns_mgr = ns_mgr;
+ this.mode_each = false; rslts.Clear();
+ }
+ @Override public Dsv_fld_parser[] Fld_parsers() {return new Dsv_fld_parser[] {Dsv_fld_parser_.Bry_parser, Dsv_fld_parser_.Bry_parser};}
+ @Override public boolean Write_bry(Dsv_tbl_parser parser, int fld_idx, byte[] src, int bgn, int end) {
+ switch (fld_idx) {
+ case 0: ns_ids_bry = Bry_.Mid(src, bgn, end); return true;
+ case 1: name = String_.new_utf8_(src, bgn, end); return true;
+ default: return false;
+ }
+ }
+ @Override public void Commit_itm(Dsv_tbl_parser parser, int pos) {
+ if (ns_ids_bry == null) throw parser.Err_row_bgn("ns_itm missing ns_ids", pos);
+ if (mode_each) return;
+ if (Bry_.Eq(ns_ids_bry, ns_ids_bry_each)) {
+ mode_each = true;
+ int len = ns_mgr.Ords_len();
+ for (int i = 0; i < len; ++i) {
+ Xow_ns ns = ns_mgr.Ords_get_at(i);
+ int ns_id = ns.Id();
+ rslts.Add(new Xob_ns_file_itm(db_file_tid, "ns." + Int_.Xto_str_pad_bgn_zero(ns_id, 3), Int_.Ary(ns_id)));
+ }
+ return;
+ }
+ int[] ns_ids = null;
+ if (ns_ids_bry.length == 1 && ns_ids_bry[0] == Byte_ascii.Asterisk) { // "*"
+ int len = ns_mgr.Ords_len();
+ ns_ids = new int[len];
+ for (int i = 0; i < len; ++i)
+ ns_ids[i] = ns_mgr.Ords_get_at(i).Id();
+ }
+ else
+ ns_ids = Int_.Ary_parse(String_.new_utf8_(ns_ids_bry), ",");
+ if (ns_ids.length == 0) throw Err_.new_("map.invalid.ns_missing; src={0}", this.Src());
+ if (String_.Len_eq_0(name)) { // no name; auto-generate
+ int ns_id_1st = ns_ids[0]; // take 1st ns_id
+ name = "ns." + Int_.Xto_str_pad_bgn_zero(ns_id_1st, 3); // EX: ns.000
+ }
+ Xob_ns_file_itm ns_itm = new Xob_ns_file_itm(db_file_tid, name, ns_ids);
+ rslts.Add(ns_itm);
+ ns_itm.toString();
+ ns_ids = null; name = null;
+ }
+ public Xob_ns_file_itm[] To_ary(byte[] bry) {
+ this.Load_by_bry(bry);
+ return (Xob_ns_file_itm[])rslts.Xto_ary(Xob_ns_file_itm.class);
+ }
+ private static final byte[] ns_ids_bry_each = Bry_.new_ascii_("");
+ /*
+"" -> no rules; return "default"; generates "text-001" and lumps all ns into it
+"*||3700|2" -> auto-generate per ns
+
+||gzip
+||gzip
+ */
+}
diff --git a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_parse_all_src_sql.java b/400_xowa/src/gplx/xowa/bldrs/cmds/Xob_parse_all_src_sql.java
similarity index 54%
rename from 400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_parse_all_src_sql.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/Xob_parse_all_src_sql.java
index cdf5aa9e4..1566a2c4a 100644
--- a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_parse_all_src_sql.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/Xob_parse_all_src_sql.java
@@ -15,37 +15,8 @@ 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 .
*/
-package gplx.xowa.bldrs.oimgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-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 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.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;
- }
- public void Fetch_next(OrderedHash hash, int ns_id, byte[] ttl) {
- 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++) {
- Xowd_db_file text_file = text_files_ary[i];
- db_mgr.Tbl_text().Select_in(cancelable, text_file, hash);
- }
- }
- public static Xowd_db_file[] Init_text_files_ary(Xowe_core_data_mgr core_data_mgr) {
- ListAdp text_files_list = ListAdp_.new_();
- 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++) {
- 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 (Xowd_db_file[])text_files_list.Xto_ary_and_clear(Xowd_db_file.class);
- }
-}
+package gplx.xowa.bldrs.cmds; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+import gplx.xowa.wikis.data.*; import gplx.xowa.dbs.*; import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.wikis.data.tbls.*;
class Xob_dump_src_id {
private Xodb_mgr_sql db_mgr; private byte redirect;
private String page_db_url; private int size_max;
@@ -53,7 +24,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.Core_data_mgr().Dbs__get_by_tid_1st(Xowd_db_file_.Tid_core).Url().Raw();
+ this.page_db_url = db_mgr.Core_data_mgr().Db__core().Url().Raw();
return this;
}
public void Get_pages(ListAdp list, int text_db_idx, int cur_ns, int prv_id) {
@@ -63,9 +34,9 @@ class Xob_dump_src_id {
try {
rdr = New_rdr(db_mgr, page_db_url, text_db_idx, cur_ns, prv_id, redirect);
while (rdr.MoveNextPeer()) {
- Xodb_page page = New_page(db_mgr, cur_ns, rdr);
+ Xowd_page_itm page = New_page(db_mgr, cur_ns, rdr);
list.Add(page);
- size_len += page.Wtxt_len();
+ size_len += page.Text_len();
if (size_len > size_max)
break;
}
@@ -82,14 +53,17 @@ class Xob_dump_src_id {
}
return text_stmt.Clear().Val_int(prv_id).Val_int(cur_ns).Exec_select();
}
- private static Xodb_page New_page(Xodb_mgr_sql db_mgr, int ns_id, DataRdr rdr) {
- Xodb_page rv = new Xodb_page();
- rv.Id_(rdr.ReadInt(Xodb_page_tbl.Fld_page_id));
+ private static Xowd_page_itm New_page(Xodb_mgr_sql db_mgr, int ns_id, DataRdr rdr) {
+ Xowd_page_tbl page_core_tbl = db_mgr.Core_data_mgr().Tbl__page();
+ Xowd_page_itm rv = new Xowd_page_itm();
+ rv.Id_(rdr.ReadInt(page_core_tbl.Fld_page_id()));
rv.Ns_id_(ns_id);
- rv.Ttl_page_db_(rdr.ReadBryByStr(Xodb_page_tbl.Fld_page_title));
- byte[] old_text = rdr.ReadBry(Xodb_text_tbl.Fld_old_text);
- old_text = db_mgr.Wiki().Appe().Zip_mgr().Unzip(db_mgr.Data_storage_format(), old_text);
- rv.Wtxt_(old_text);
+ rv.Ttl_page_db_(rdr.ReadBryByStr(page_core_tbl.Fld_page_title()));
+
+ String text_data_name = db_mgr.Core_data_mgr().Db__core().Tbl__text().Fld_text_data();
+ byte[] text_data = rdr.ReadBry(text_data_name);
+ text_data = db_mgr.Wiki().Appe().Zip_mgr().Unzip(db_mgr.Core_data_mgr().Props().Zip_tid_text(), text_data);
+ rv.Text_(text_data);
return rv;
}
private static String New_rdr__redirect_clause(byte redirect) {
@@ -103,7 +77,7 @@ class Xob_dump_src_id {
private static final String Sql_select = String_.Concat_lines_nl
( "SELECT p.page_id"
, ", p.page_title"
- , ", t.old_text"
+ , ", t.text_data"
, "FROM page_dump p"
, " JOIN text t ON t.page_id = p.page_id"
, "WHERE p.page_id > ?"
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Uca_trie.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Uca_trie.java
similarity index 97%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Uca_trie.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Uca_trie.java
index 10228c801..d89581b93 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Uca_trie.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Uca_trie.java
@@ -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 .
*/
-package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
+package gplx.xowa.bldrs.cmds.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
import gplx.core.btries.*;
class Uca_trie {
public void Init() {
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Uca_trie_tst.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Uca_trie_tst.java
similarity index 88%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Uca_trie_tst.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Uca_trie_tst.java
index a28d4d47e..fae1bd10f 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Uca_trie_tst.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Uca_trie_tst.java
@@ -15,8 +15,8 @@ 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 .
*/
-package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
-import org.junit.*;
+package gplx.xowa.bldrs.cmds.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import org.junit.*; import gplx.xowa.bldrs.*;
public class Uca_trie_tst {
@Before public void init() {fxt.Clear();} private Xob_base_fxt fxt = new Xob_base_fxt();
@Test public void Basic() {
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_category_registry_sql.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_category_registry_sql.java
similarity index 54%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_category_registry_sql.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_category_registry_sql.java
index 01d22466c..c816df5f6 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_category_registry_sql.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_category_registry_sql.java
@@ -15,44 +15,40 @@ 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 .
*/
-package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
-import gplx.ios.*; import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.dbs.*;
+package gplx.xowa.bldrs.cmds.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.ios.*; import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.dbs.*; import gplx.xowa.bldrs.*;
public class Xob_category_registry_sql implements Xob_cmd {
public Xob_category_registry_sql(Xob_bldr bldr, Xowe_wiki wiki) {this.wiki = wiki;} private Xowe_wiki wiki;
- public String Cmd_key() {return KEY;} public static final String KEY = "import.sql.category_registry";
- public void Cmd_ini(Xob_bldr bldr) {}
- public void Cmd_bgn(Xob_bldr bldr) {}
- public void Cmd_run() {}
+ public String Cmd_key() {return Xob_cmd_keys.Key_text_cat_core;}
public void Cmd_end() { // NOTE: placing in end, b/c must run *after* page_sql
+ // setup
wiki.Html_mgr().Importing_ctgs_(Bool_.Y);
- Io_url rslt_dir = Xob_category_registry_sql.Get_dir_output(wiki);
+ Io_url rslt_dir = Xob_category_registry_sql.Tmp_dir(wiki);
Io_mgr._.DeleteDirDeep(rslt_dir);
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.Core_data_mgr().Conn_core();
- Db_qry__select_cmd qry = Db_qry__select_cmd.new_()
- .Cols_(Xodb_page_tbl.Fld_page_title, Xodb_page_tbl.Fld_page_id)
- .From_(Xodb_page_tbl.Tbl_name)
- .Where_(Db_crt_.eq_(Xodb_page_tbl.Fld_page_ns, Xow_ns_.Id_category))
- .OrderBy_asc_(Xodb_page_tbl.Fld_page_title);
- DataRdr rdr = DataRdr_.Null;
+ // read data
Gfo_usr_dlg usr_dlg = wiki.Appe().Usr_dlg();
+ wiki.Init_db_mgr();
+ Xowd_page_tbl page_core_tbl = wiki.Db_mgr_as_sql().Core_data_mgr().Tbl__page();
+ Db_rdr rdr = page_core_tbl.Conn().Stmt_select_order(page_core_tbl.Tbl_name(), String_.Ary(page_core_tbl.Fld_page_title(), page_core_tbl.Fld_page_id()), String_.Ary(page_core_tbl.Fld_page_ns()), page_core_tbl.Fld_page_title())
+ .Crt_int(page_core_tbl.Fld_page_ns(), Xow_ns_.Id_category)
+ .Exec_select__rls_auto();
try {
- rdr = qry.Exec_qry_as_rdr(conn);
- while (rdr.MoveNextPeer()) {
- byte[] page_ttl = rdr.ReadBryByStr(Xodb_page_tbl.Fld_page_title);
- int page_id = rdr.ReadInt(Xodb_page_tbl.Fld_page_id);
+ while (rdr.Move_next()) {
+ byte[] page_ttl = rdr.Read_bry_by_str(page_core_tbl.Fld_page_title());
+ int page_id = rdr.Read_int(page_core_tbl.Fld_page_id());
if (rslt_wtr.FlushNeeded(page_ttl.length + 2 + 5)) rslt_wtr.Flush(usr_dlg);
rslt_wtr.Bfr().Add(page_ttl).Add_byte_pipe().Add_base85_len_5(page_id).Add_byte_nl();
}
} finally {rdr.Rls();}
+ // cleanup
rslt_wtr.Flush(usr_dlg);
wiki.Html_mgr().Importing_ctgs_(Bool_.N);
}
- public void Cmd_print() {}
- public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
- return GfoInvkAble_.Rv_unhandled;
- }
- public static Io_url Get_dir_output(Xowe_wiki wiki) {return wiki.Fsys_mgr().Tmp_dir().GenSubDir(KEY);}
+ public void Cmd_init(Xob_bldr bldr) {}
+ public void Cmd_bgn(Xob_bldr bldr) {}
+ public void Cmd_run() {}
+ public void Cmd_term() {}
+ public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {return GfoInvkAble_.Rv_unhandled;}
+ public static Io_url Tmp_dir(Xowe_wiki wiki) {return wiki.Fsys_mgr().Tmp_dir().GenSubDir(Xob_cmd_keys.Key_text_cat_core);}
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_category_registry_sql_tst.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_category_registry_sql_tst.java
similarity index 76%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_category_registry_sql_tst.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_category_registry_sql_tst.java
index c423a85a7..04bf5bedd 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_category_registry_sql_tst.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_category_registry_sql_tst.java
@@ -15,10 +15,11 @@ 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 .
*/
-package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
-import org.junit.*; import gplx.core.primitives.*;
+package gplx.xowa.bldrs.cmds.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import org.junit.*; import gplx.core.primitives.*; import gplx.xowa.bldrs.*;
public class Xob_category_registry_sql_tst {
- @Before public void init() {if (Xoa_test_.Db_skip()) return; fxt.Clear();} private Xob_category_registry_sql_fxt fxt = new Xob_category_registry_sql_fxt();
+ @Before public void init() {if (Xoa_test_.Db_skip()) return; fxt.Clear();} private Xob_category_registry_sql_fxt fxt = new Xob_category_registry_sql_fxt();
+ @After public void term() {if (Xoa_test_.Db_skip()) return; fxt.Rls();}
@Test public void Basic() {
if (Xoa_test_.Db_skip()) return;
fxt.Init_page_insert(String_.Ary("Ctg3", "Ctg2", "Ctg1"));
@@ -27,6 +28,7 @@ public class Xob_category_registry_sql_tst {
}
}
class Xob_category_registry_sql_fxt {
+ Db_mgr_fxt fxt; Xowe_wiki wiki; Xoae_app app; Int_obj_ref page_id_next = Int_obj_ref.new_(1);
public void Clear() {
if (fxt == null) {
fxt = new Db_mgr_fxt().Ctor_fsys();
@@ -34,16 +36,17 @@ class Xob_category_registry_sql_fxt {
wiki = fxt.Wiki();
app = wiki.Appe();
}
- } Db_mgr_fxt fxt; Xowe_wiki wiki; Xoae_app app; Int_obj_ref page_id_next = Int_obj_ref.new_(1);
+ }
+ public void Rls() {fxt.Rls();}
public void Init_page_insert(String[] ttls) {
fxt.Init_page_insert(page_id_next, Xow_ns_.Id_category, ttls);
}
public void Exec_category_registry_cmd() {
- app.Bldr().Cmd_mgr().Add_cmd(wiki, Xob_category_registry_sql.KEY);
+ app.Bldr().Cmd_mgr().Add_cmd(wiki, Xob_cmd_keys.Key_text_cat_core);
app.Bldr().Run();
}
public void Test_ids(int[] expd) {
- Io_url rslts_dir = Xob_category_registry_sql.Get_dir_output(wiki);
+ Io_url rslts_dir = Xob_category_registry_sql.Tmp_dir(wiki);
String rslts_txt = Io_mgr._.LoadFilStr(Io_mgr._.QueryDir_fils(rslts_dir)[0]);
int[] actl = Parse_rslts_txt(rslts_txt);
Tfds.Eq_ary(expd, actl);
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_base.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_categorylinks_base.java
similarity index 87%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_base.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_categorylinks_base.java
index f478daa8b..8444e2dc8 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_base.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_categorylinks_base.java
@@ -15,16 +15,17 @@ 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 .
*/
-package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
+package gplx.xowa.bldrs.cmds.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
import gplx.core.brys.*; import gplx.ios.*; import gplx.xowa.ctgs.*;
public abstract class Xob_categorylinks_base extends Xob_sql_dump_base implements Sql_file_parser_cmd {
+ private DateAdp_parser date_parser = DateAdp_parser.new_(); private Sql_file_parser sql_parser; Uca_trie trie; private Bry_bfr uca_bfr = Bry_bfr.reset_(255);
public abstract Io_sort_cmd Make_sort_cmd(Sql_file_parser sql_parser);
@Override public String Sql_file_name() {return "categorylinks";}
@Override public void Cmd_bgn_hook(Xob_bldr bldr, Sql_file_parser parser) {
this.sql_parser = parser;
wiki.Html_mgr().Importing_ctgs_(Bool_.Y);
parser.Fld_cmd_(this).Flds_req_(Fld_cl_from, Fld_cl_to, Fld_cl_timestamp, Fld_cl_collation, Fld_cl_sortkey, Fld_cl_type);
- } static final byte[] Fld_cl_from = Bry_.new_ascii_("cl_from"), Fld_cl_to = Bry_.new_ascii_("cl_to"), Fld_cl_timestamp = Bry_.new_ascii_("cl_timestamp"), Fld_cl_collation = Bry_.new_ascii_("cl_collation"), Fld_cl_sortkey = Bry_.new_ascii_("cl_sortkey"), Fld_cl_type = Bry_.new_ascii_("cl_type");
+ }
public void Exec(byte[] src, byte[] fld_key, int fld_idx, int fld_bgn, int fld_end, Bry_bfr file_bfr, Sql_file_parser_data data) {
if (Bry_.Eq(fld_key, Fld_cl_from)) cur_id = Bry_.Xto_int_or(src, fld_bgn, fld_end, -1);
else if (Bry_.Eq(fld_key, Fld_cl_to)) cur_ctg = Bry_.Mid(src, fld_bgn, fld_end);
@@ -68,7 +69,7 @@ public abstract class Xob_categorylinks_base extends Xob_sql_dump_base implement
Xobdc_merger.Basic(bldr.Usr_dlg(), dump_url_gen, temp_dir.GenSubDir("sort"), sort_mem_len, Xoctg_link_sql_sorter._, Io_line_rdr_key_gen_.noop, Make_sort_cmd(sql_parser));
wiki.Html_mgr().Importing_ctgs_(Bool_.N);
}
- DateAdp_parser date_parser = DateAdp_parser.new_(); Sql_file_parser sql_parser; Uca_trie trie; Bry_bfr uca_bfr = Bry_bfr.reset_(255);
+ private static final byte[] Fld_cl_from = Bry_.new_ascii_("cl_from"), Fld_cl_to = Bry_.new_ascii_("cl_to"), Fld_cl_timestamp = Bry_.new_ascii_("cl_timestamp"), Fld_cl_collation = Bry_.new_ascii_("cl_collation"), Fld_cl_sortkey = Bry_.new_ascii_("cl_sortkey"), Fld_cl_type = Bry_.new_ascii_("cl_type");
private static final byte[] Collation_uca = Bry_.new_utf8_("uca"), Sortkey_space = new byte[] {Byte_ascii.Space};
}
class Xoctg_link_sql_sorter implements gplx.lists.ComparerAble {
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_base_tst.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_categorylinks_base_tst.java
similarity index 77%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_base_tst.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_categorylinks_base_tst.java
index 01ce9fc91..1c8e2e92c 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_base_tst.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_categorylinks_base_tst.java
@@ -15,21 +15,21 @@ 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 .
*/
-package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
-import org.junit.*;
+package gplx.xowa.bldrs.cmds.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import org.junit.*; import gplx.xowa.bldrs.*;
public class Xob_categorylinks_base_tst {
@Before public void init() {fxt.Clear();} private Xob_base_fxt fxt = new Xob_base_fxt();
@Test public void Basic() {
Io_url src_fil = Io_url_.new_fil_("mem/temp/sql_dump.sql");
fxt .Init_fil(src_fil, String_.Concat
- ( Xob_categorylinks_sql.Tbl_categorylinks
+ ( Xob_categorylinks_sql.Sql_categorylinks
, "INSERT INTO `categorylinks` VALUES"
, " (1,'Ctg_2','PAGE_2a','2013-04-15 01:02:03','','uppercase','page')"
, ",(2,'Ctg_1','PAGE_1b','2013-04-15 01:02:03','','uppercase','page')"
, ",(3,'Ctg_1','PAGE_1a','2013-04-15 01:02:03','','uppercase','page')"
, ";"
))
- .Exec_cmd(Xob_categorylinks_txt.KEY, GfoMsg_.basic_(Xob_categorylinks_base.Invk_src_fil_, src_fil))
+ .Exec_cmd(Xob_cmd_keys.Key_tdb_text_cat_link, GfoMsg_.basic_(Xob_categorylinks_base.Invk_src_fil_, src_fil))
.Test_fil("mem/xowa/wiki/en.wikipedia.org/tmp/ctg.link_sql/make/0000000000.csv", String_.Concat_lines_nl
( "Ctg_1|p|PAGE_1a|!!!!$|#8DDL|"
, "Ctg_1|p|PAGE_1b|!!!!#|#8DDL|"
@@ -37,16 +37,16 @@ public class Xob_categorylinks_base_tst {
))
;
}
- @Test public void SuperEarths() { // PURPOSE: handle multi-field sort
+ @Test public void Super_earths() { // PURPOSE: handle multi-field sort
Io_url src_fil = Io_url_.new_fil_("mem/temp/sql_dump.sql");
fxt .Init_fil(src_fil, String_.Concat
- ( Xob_categorylinks_sql.Tbl_categorylinks
+ ( Xob_categorylinks_sql.Sql_categorylinks
, "INSERT INTO `categorylinks` VALUES"
, " (1,'Super-Earths','PAGE_1a','2013-04-15 01:02:03','','uppercase','page')"
, ",(2,'Super-Earths_in_the_habitable_zone','PAGE_1b','2013-04-15 01:02:03','','uppercase','page')"
, ";"
))
- .Exec_cmd(Xob_categorylinks_txt.KEY, GfoMsg_.basic_(Xob_categorylinks_base.Invk_src_fil_, src_fil))
+ .Exec_cmd(Xob_cmd_keys.Key_tdb_text_cat_link, GfoMsg_.basic_(Xob_categorylinks_base.Invk_src_fil_, src_fil))
.Test_fil("mem/xowa/wiki/en.wikipedia.org/tmp/ctg.link_sql/make/0000000000.csv", String_.Concat_lines_nl
( "Super-Earths|p|PAGE_1a|!!!!\"|#8DDL|"
, "Super-Earths_in_the_habitable_zone|p|PAGE_1b|!!!!#|#8DDL|"
@@ -56,12 +56,12 @@ public class Xob_categorylinks_base_tst {
@Test public void Sortkey_has_newline() { // PURPOSE: sortkey sometimes has format of "sortkey\ntitle"; EX: "WALES, JIMMY\nJIMMY WALES"; discard 2nd for hard-disk space savings
Io_url src_fil = Io_url_.new_fil_("mem/temp/sql_dump.sql");
fxt .Init_fil(src_fil, String_.Concat
- ( Xob_categorylinks_sql.Tbl_categorylinks
+ ( Xob_categorylinks_sql.Sql_categorylinks
, "INSERT INTO `categorylinks` VALUES"
, " (1,'Ctg_1','LAST,FIRST\\nFIRST LAST','2013-04-15 01:02:03','','uppercase','page')"
, ";"
))
- .Exec_cmd(Xob_categorylinks_txt.KEY, GfoMsg_.basic_(Xob_categorylinks_base.Invk_src_fil_, src_fil))
+ .Exec_cmd(Xob_cmd_keys.Key_tdb_text_cat_link, GfoMsg_.basic_(Xob_categorylinks_base.Invk_src_fil_, src_fil))
.Test_fil("mem/xowa/wiki/en.wikipedia.org/tmp/ctg.link_sql/make/0000000000.csv", String_.Concat_lines_nl
( "Ctg_1|p|LAST,FIRST|!!!!\"|#8DDL|"
))
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_categorylinks_sql.java
similarity index 84%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_categorylinks_sql.java
index 68329e799..06a6b5565 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_categorylinks_sql.java
@@ -15,14 +15,14 @@ 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 .
*/
-package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
-import gplx.ios.*;
+package gplx.xowa.bldrs.cmds.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.ios.*; import gplx.xowa.bldrs.*;
public class Xob_categorylinks_sql extends Xob_categorylinks_base {
private Db_idx_mode idx_mode = Db_idx_mode.Itm_end;
public Xob_categorylinks_sql(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki); this.make_fil_len = Io_mgr.Len_mb;}
- @Override public String Cmd_key() {return KEY;} public static final String KEY = "import.sql.categorylinks";
+ @Override public String Cmd_key() {return Xob_cmd_keys.Key_text_cat_link;}
@Override public Io_sort_cmd Make_sort_cmd(Sql_file_parser sql_parser) {return new Xob_categorylinks_sql_make(sql_parser, wiki, idx_mode);}
- public static final String Tbl_categorylinks = String_.Concat_lines_nl
+ public static final String Sql_categorylinks = String_.Concat_lines_nl
( "CREATE TABLE `categorylinks` ("
, " `cl_from` int(10) unsigned NOT NULL DEFAULT '0',"
, " `cl_to` varbinary(255) NOT NULL DEFAULT '',"
diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_categorylinks_sql_make.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_categorylinks_sql_make.java
new file mode 100644
index 000000000..b9e4e2e78
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_categorylinks_sql_make.java
@@ -0,0 +1,153 @@
+/*
+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 .
+*/
+package gplx.xowa.bldrs.cmds.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.core.flds.*; import gplx.ios.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.ctgs.*;
+import gplx.xowa.bldrs.*;
+import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.data.tbls.*;
+public class Xob_categorylinks_sql_make implements Io_make_cmd {
+ private Gfo_usr_dlg usr_dlg; private final Xowe_wiki wiki; private final Db_idx_mode idx_mode; private Xowd_db_mgr core_db_mgr;
+ private final Sql_file_parser sql_parser; private final Gfo_fld_rdr fld_rdr = Gfo_fld_rdr.xowa_(); private Io_line_rdr name_id_rdr;
+ private Xowd_cat_core_tbl cat_core_tbl; private Xowd_cat_link_tbl cat_link_tbl;
+ private long cat_db_size, cat_db_max; private int cur_row_count;
+ private int[] cur_cat_counts = new int[Xoa_ctg_mgr.Tid__max]; private byte[] cur_cat_ttl = Ttl_first; private int cur_cat_id; private int cur_cat_file_idx;
+ public Xob_categorylinks_sql_make(Sql_file_parser sql_parser, Xowe_wiki wiki, Db_idx_mode idx_mode) {
+ this.wiki = wiki; this.sql_parser = sql_parser; this.idx_mode = idx_mode; usr_dlg = wiki.Appe().Usr_dlg();
+ }
+ public void Sort_bgn() {
+ this.core_db_mgr = wiki.Db_mgr_as_sql().Core_data_mgr();
+ this.name_id_rdr = New_registry_rdr(wiki, usr_dlg);
+ this.cat_db_max = wiki.Appe().Api_root().Bldr().Wiki().Import().Cat_link_db_max();
+ boolean one_file = core_db_mgr.Props().Layout_text().Tid_is_all_or_few();
+ if (!one_file) // cat is in its own dbs: delete dbs
+ core_db_mgr.Dbs__delete_by_tid(Xowd_db_file_.Tid_cat, Xowd_db_file_.Tid_cat_core, Xowd_db_file_.Tid_cat_link); // delete existing category files else upgrade won't work
+ Db_make(Bool_.Y);
+ if (one_file) { // cat is in single db; delete tbls;
+ cat_core_tbl.Delete_all();
+ cat_link_tbl.Delete_all();
+ }
+ }
+ public void Sort_do(Io_line_rdr rdr) {
+ byte[] new_cat_ttl = Bry_.Empty;
+ try {
+ fld_rdr.Ini(rdr.Bfr(), rdr.Itm_pos_bgn());
+ new_cat_ttl = fld_rdr.Read_bry_escape();
+ if (!Bry_.Eq(new_cat_ttl, cur_cat_ttl)) // ttl changed
+ cur_cat_id = Save_ctg(new_cat_ttl);
+ if (cur_cat_id == Cur_cat_id_null) return;
+ byte cat_tid = Convert_cat_tid_to_byte(fld_rdr.Read_byte());
+ byte[] cat_sortkey = fld_rdr.Read_bry_escape();
+ int page_id = fld_rdr.Read_int_base85_len5();
+ int cat_timestamp = fld_rdr.Read_int_base85_len5();
+ cat_link_tbl.Insert_cmd_by_batch(page_id, cur_cat_id, cat_tid, cat_sortkey, cat_timestamp);
+ cat_db_size += 34 + 20 + 12 + (cat_sortkey.length * 2); // NOTE_1: categorylinks row size
+ ++cur_cat_counts[cat_tid];
+ ++cur_row_count;
+ if (cur_row_count % 100000 == 0) usr_dlg.Prog_one("", "", "inserting category row: ~{0}", cur_row_count);
+ if (cur_row_count % 1000000 == 0) {cat_core_tbl.Conn().Txn_sav(); cat_link_tbl.Conn().Txn_sav();}
+ } catch (Exception e) {usr_dlg.Warn_many("", "", "ctg_links.insert failed: name=~{0} err=~{1}", String_.new_utf8_(new_cat_ttl), Err_.Message_gplx_brief(e));}
+ }
+ public void Sort_end() {
+ Save_ctg(Ttl_last);
+ Db_close();
+ Xodb_mgr_sql db_mgr_sql = wiki.Db_mgr_as_sql();
+ if (db_mgr_sql.Category_version() == Xoa_ctg_mgr.Version_null) // NOTE: ctg_v1 wkr will set this to v1; only set to v2 if null
+ db_mgr_sql.Category_version_update(false);
+ usr_dlg.Log_many("", "", "import.category.v2: insert done; committing; rows=~{0}", cur_row_count);
+ 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 int Save_ctg(byte[] new_ctg_ttl) {
+ if (cur_cat_ttl != Bry_.Empty && cur_cat_id != -1)
+ cat_core_tbl.Insert_cmd_by_batch(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 (cat_db_size > cat_db_max) {Db_close(); Db_make(Bool_.N);}
+ 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 Db_make(boolean first) {
+ boolean one_file = core_db_mgr.Props().Layout_text().Tid_is_all_or_few();
+ if (first) { // create cat_core
+ Xowd_db_file cat_core_db = one_file ? core_db_mgr.Db__cat_core() : core_db_mgr.Dbs__make_by_tid(Xowd_db_file_.Tid_cat_core);
+ this.cat_core_tbl = cat_core_db.Tbl__cat_core().Create_tbl();
+ }
+ Xowd_db_file cat_link_db = one_file ? core_db_mgr.Db__core() : core_db_mgr.Dbs__make_by_tid(Xowd_db_file_.Tid_cat_link);
+ this.cat_link_tbl = cat_link_db.Tbl__cat_link();
+ if ( (one_file && first)
+ || !one_file)
+ cat_link_tbl.Create_tbl();
+ this.cur_cat_file_idx = cat_link_db.Id();
+ cat_core_tbl.Insert_bgn();
+ cat_link_tbl.Insert_bgn();
+ if (idx_mode.Tid_is_bgn()) cat_link_tbl.Create_idx();
+ }
+ private void Db_close() {
+ cat_core_tbl.Insert_end();
+ cat_link_tbl.Insert_end();
+ cat_db_size = 0;
+ if (idx_mode.Tid_is_end()) cat_link_tbl.Create_idx();
+ }
+ private static byte Convert_cat_tid_to_byte(byte ltr) {
+ switch (ltr) {
+ case Byte_ascii.Ltr_f: return Xoa_ctg_mgr.Tid_file;
+ case Byte_ascii.Ltr_p: return Xoa_ctg_mgr.Tid_page;
+ case Byte_ascii.Ltr_c: return Xoa_ctg_mgr.Tid_subc;
+ default: throw Err_.unhandled(ltr);
+ }
+ }
+ public Io_sort_cmd Make_dir_(Io_url v) {return this;}
+ private int Cur_cat_id_find(byte[] ttl) {
+ while (true) {
+ int compare = Bry_.Compare(ttl, 0, ttl.length, name_id_rdr.Bfr(), name_id_rdr.Key_pos_bgn(), name_id_rdr.Key_pos_end());
+ switch (compare) {
+ case CompareAble_.Same: return Base85_utl.XtoIntByAry(name_id_rdr.Bfr(), name_id_rdr.Key_pos_end() + 1, name_id_rdr.Itm_pos_end() - 2);
+ case CompareAble_.More:
+ boolean reading = name_id_rdr.Read_next();
+ if (!reading) return Cur_cat_id_null; // eof return
+ break;
+ case CompareAble_.Less: return Cur_cat_id_null; // stop
+ }
+ }
+ }
+ private static final int Cur_cat_id_null = -1;
+ private static Io_line_rdr New_registry_rdr(Xowe_wiki wiki, Gfo_usr_dlg usr_dlg) {
+ Io_url make_dir = Xob_category_registry_sql.Tmp_dir(wiki);
+ usr_dlg.Prog_many("", "", "loading category_registry files: ~{0}", make_dir.Raw());
+ Io_url[] urls = Io_mgr._.QueryDir_args(make_dir).ExecAsUrlAry();
+ return new Io_line_rdr(usr_dlg, urls).Key_gen_(Io_line_rdr_key_gen_.first_pipe);
+ }
+ private static final byte[] Ttl_last = null, Ttl_first = Bry_.Empty;
+}
+/*
+NOTE_1: categorylinks row size: 34 + 20 + 12 + (cat_sortkey.length * 2)
+row length (data) : 34=8+4+4+14+4 ROWID, cl_from, cl_to_id, cl_timestamp, cl_type_id
+cl_main length (idx) : 20=8+4+4+4 ROWID, cl_from, cl_to_id, cl_type_id
+cl_from length (idx) : 12=8+4 ROWID, cl_from
+variable_data length : cat_sortkey.length * 2 sortkey is used for row and cl_main
+
+Note the following
+. ints are 4 bytes
+. tinyint is assumed to be 4 bytes (should be 1, but sqlite only has one numeric datatype, so import all 4?)
+. varchar(14) is assumed to be 14 bytes (should be 15? +1 for length of varchar?)
+. calculations work out "too well". comparing 4 databases gets +/- .25 bytes per row. however
+.. - bytes should not be possible
+.. +.25 bytes is too low (18 MB out of 5.5 GB).*; there must be other bytes used for page breaks / fragmentation
+*/
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql_tst.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_categorylinks_sql_tst.java
similarity index 86%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql_tst.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_categorylinks_sql_tst.java
index 318f3b97e..b84883dc5 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql_tst.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_categorylinks_sql_tst.java
@@ -15,8 +15,8 @@ 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 .
*/
-package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
-import org.junit.*; import gplx.core.primitives.*; import gplx.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.ctgs.*;
+package gplx.xowa.bldrs.cmds.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import org.junit.*; import gplx.core.primitives.*; import gplx.dbs.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.ctgs.*; import gplx.xowa.bldrs.*;
public class Xob_categorylinks_sql_tst {
@Before public void init() {if (Xoa_test_.Db_skip()) return; fxt.Ctor_fsys();} Db_mgr_fxt fxt = new Db_mgr_fxt();
@After public void term() {if (Xoa_test_.Db_skip()) return; fxt.Rls();}
@@ -25,7 +25,7 @@ public class Xob_categorylinks_sql_tst {
fxt.Init_db_sqlite();
fxt.Init_page_insert(Int_obj_ref.new_(1), Xow_ns_.Id_category, String_.Ary("Ctg_1", "Ctg_2"));
fxt.Init_fil(Xoa_test_.Url_wiki_enwiki().GenSubFil("xowa_categorylinks.sql"), String_.Concat
- ( Xob_categorylinks_sql.Tbl_categorylinks
+ ( Xob_categorylinks_sql.Sql_categorylinks
, "INSERT INTO `categorylinks` VALUES"
, " (3,'Ctg_2','File:2a','2013-04-15 01:02:03','','uppercase','file')"
, ",(4,'Ctg_1','1b','2013-04-15 01:02:03','','uppercase','page')"
@@ -34,14 +34,14 @@ 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().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)
+ Db_conn conn = fxt.Wiki().Db_mgr_as_sql().Core_data_mgr().Db__cat_core().Conn();
+ Db_tst_qry.tbl_("cat_core", "cat_id")
+ .Cols_("cat_id", "cat_subcats", "cat_files", "cat_pages")
.Rows_add_vals(1, 0, 0, 2)
.Rows_add_vals(2, 0, 1, 0)
.Test(conn);
- Db_tst_qry.tbl_(Xodb_categorylinks_tbl.Tbl_name, Xodb_categorylinks_tbl.Fld_cl_from)
- .Cols_(Xodb_categorylinks_tbl.Fld_cl_from, Xodb_categorylinks_tbl.Fld_cl_to_id, Xodb_categorylinks_tbl.Fld_cl_sortkey, Xodb_categorylinks_tbl.Fld_cl_type_id)
+ Db_tst_qry.tbl_("cat_link", "cl_from")
+ .Cols_("cl_from", "cl_to_id", "cl_sortkey", "cl_type_id")
.Rows_add_vals(3, 2, "File:2a" , Xoa_ctg_mgr.Tid_file)
.Rows_add_vals(4, 1, "1b" , Xoa_ctg_mgr.Tid_page)
.Rows_add_vals(5, 1, "1a" , Xoa_ctg_mgr.Tid_page)
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_txt.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_categorylinks_txt.java
similarity index 82%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_txt.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_categorylinks_txt.java
index 7cbb43ea1..2c7e3675e 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_txt.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_categorylinks_txt.java
@@ -15,10 +15,10 @@ 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 .
*/
-package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
+package gplx.xowa.bldrs.cmds.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
import gplx.ios.*;
public class Xob_categorylinks_txt extends Xob_categorylinks_base {
public Xob_categorylinks_txt(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki); this.make_fil_len = Io_mgr.Len_mb;}
- @Override public String Cmd_key() {return KEY;} public static final String KEY = "ctg.link_sql";
+ @Override public String Cmd_key() {return Xob_cmd_keys.Key_tdb_text_cat_link;}
@Override public Io_sort_cmd Make_sort_cmd(Sql_file_parser sql_parser) {return new Io_sort_fil_basic(bldr.Usr_dlg(), this.Make_url_gen(), make_fil_len);}
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_base.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_ctg_v1_base.java
similarity index 90%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_base.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_ctg_v1_base.java
index b007a73bc..f60b3c35a 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_base.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_ctg_v1_base.java
@@ -15,8 +15,9 @@ 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 .
*/
-package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
+package gplx.xowa.bldrs.cmds.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
import gplx.core.primitives.*; import gplx.core.btries.*; import gplx.core.flds.*; import gplx.ios.*; import gplx.xowa.tdbs.*;
+import gplx.xowa.wikis.data.tbls.*;
public abstract class Xob_ctg_v1_base extends Xob_itm_dump_base implements Xobd_parser_wkr, GfoInvkAble {
protected Xob_ctg_v1_base() {} // TEST:needed for fxt
public Xob_ctg_v1_base Ctor(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki); return this;}
@@ -33,7 +34,7 @@ public abstract class Xob_ctg_v1_base extends Xob_itm_dump_base implements Xobd_
tmp_bfr.Mkr_rls();
fld_wtr.Bfr_(dump_bfr);
}
- public int Wkr_run(Xodb_page page, byte[] src, int src_len, int bgn, int end) {
+ public int Wkr_run(Xowd_page_itm page, byte[] src, int src_len, int bgn, int end) {
int ttl_bgn = end, ttl_end = -1;
int pos = end;
while (true) {
@@ -64,7 +65,7 @@ public abstract class Xob_ctg_v1_base extends Xob_itm_dump_base implements Xobd_
++pos;
}
}
- @gplx.Virtual public void Log(byte err_tid, Xodb_page page, byte[] src, int ctg_bgn) {
+ @gplx.Virtual public void Log(byte err_tid, Xowd_page_itm page, byte[] src, int ctg_bgn) {
String title = String_.new_utf8_(page.Ttl_full_db());
int ctg_end = ctg_bgn + 40; if (ctg_end > src.length) ctg_end = src.length;
String ctg_str = String_.Replace(String_.new_utf8_(src, ctg_bgn, ctg_end), "\n", "");
@@ -77,7 +78,7 @@ public abstract class Xob_ctg_v1_base extends Xob_itm_dump_base implements Xobd_
bldr.Usr_dlg().Log_many(GRP_KEY, "ctg_fail", "~{0}\n>> ~{1}\n~{2}\n~{3}\n\n", LogErr_hdr, err + " " + ctg_str, "http://" + wiki.Domain_str() + "/wiki/" + title, Bry_.MidByLenToStr(src, ctg_bgn, 100));
log_idx++;
} int log_idx = 0; final String LogErr_hdr = String_.Repeat("-", 80);
- @gplx.Virtual public void Process_ctg(Xodb_page page, byte[] src, int src_len, int bgn, int end) {
+ @gplx.Virtual public void Process_ctg(Xowd_page_itm page, byte[] src, int src_len, int bgn, int end) {
Process_ctg_row(fld_wtr, dump_fil_len, dump_url_gen, page.Id(), src, src_len, bgn, end);
}
public static void Process_ctg_row(Gfo_fld_wtr fld_wtr, int dump_fil_len, Io_url_gen dump_url_gen, int page_id, byte[] src, int src_len, int bgn, int end) {
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_base_tst.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_ctg_v1_base_tst.java
similarity index 75%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_base_tst.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_ctg_v1_base_tst.java
index bab20dce7..218f3c4c3 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_base_tst.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_ctg_v1_base_tst.java
@@ -15,11 +15,10 @@ 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 .
*/
-package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
-import org.junit.*;
-import gplx.ios.*;
+package gplx.xowa.bldrs.cmds.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import org.junit.*; import gplx.ios.*; import gplx.xowa.wikis.data.tbls.*;
public class Xob_ctg_v1_base_tst {
- Xodb_page_wkr_ctg_fxt fxt = new Xodb_page_wkr_ctg_fxt();
+ Xowd_page_wkr_ctg_fxt fxt = new Xowd_page_wkr_ctg_fxt();
@Test public void One() {fxt.ini_("[[Category:A]]").tst_("A");}
@Test public void Many() {fxt.ini_("[[Category:A]] [[Category:B]] [[Category:C]]").tst_("A", "B", "C");}
@Test public void Pipe() {fxt.ini_("[[Category:A|B]]").tst_("A");}
@@ -29,10 +28,10 @@ public class Xob_ctg_v1_base_tst {
@Test public void Ws() {fxt.ini_("[[Category: A ]]").tst_("A");}
@Test public void Eos() {fxt.ini_("[[Category:abcdef").tst_();}
}
-class Xodb_page_wkr_ctg_fxt {
+class Xowd_page_wkr_ctg_fxt {
byte[] src;
- public Xodb_page_wkr_ctg_fxt ini_(String s) {src = Bry_.new_utf8_(s); return this;}
- public Xodb_page_wkr_ctg_fxt tst_(String... expd) {
+ public Xowd_page_wkr_ctg_fxt ini_(String s) {src = Bry_.new_utf8_(s); return this;}
+ public Xowd_page_wkr_ctg_fxt tst_(String... expd) {
Xobd_parser mgr = new Xobd_parser();
Xoae_app app = Xoa_app_fxt.app_();
Xowe_wiki wiki = Xoa_app_fxt.wiki_tst_(app);
@@ -41,7 +40,7 @@ class Xodb_page_wkr_ctg_fxt {
byte[] bry = Bry_.new_utf8_("[[Category:");
wkr.Wkr_hooks().Add(bry, bry);
mgr.Wkr_add(wkr);
- Xodb_page page = new Xodb_page().Wtxt_(src);//.Ttl_(Bry_.new_utf8_("Test"), new Xow_ns_mgr());
+ Xowd_page_itm page = new Xowd_page_itm().Text_(src);//.Ttl_(Bry_.new_utf8_("Test"), new Xow_ns_mgr());
mgr.Wkr_bgn(bldr);
mgr.Wkr_run(page);
byte[][] ttl = (byte[][])wkr.Found().Xto_ary(byte[].class);
@@ -54,9 +53,9 @@ class Xodb_page_wkr_ctg_fxt {
}
}
class Xobd_parser_wkr_ctg_tstr extends Xob_ctg_v1_txt { public ListAdp Found() {return found;} ListAdp found = ListAdp_.new_();
- @Override public void Process_ctg(Xodb_page page, byte[] src, int src_len, int bgn, int end) {
+ @Override public void Process_ctg(Xowd_page_itm page, byte[] src, int src_len, int bgn, int end) {
found.Add(Bry_.Mid(src, bgn, end));
}
- @Override public void Log(byte err_tid, Xodb_page page, byte[] src, int ctg_bgn) {
+ @Override public void Log(byte err_tid, Xowd_page_itm page, byte[] src, int ctg_bgn) {
}
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_sql.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_ctg_v1_sql.java
similarity index 75%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_sql.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_ctg_v1_sql.java
index 63fd2e215..18dbeb7e3 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_sql.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_ctg_v1_sql.java
@@ -15,26 +15,28 @@ 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 .
*/
-package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
+package gplx.xowa.bldrs.cmds.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
import gplx.core.flds.*; import gplx.ios.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.ctgs.*;
public class Xob_ctg_v1_sql extends Xob_ctg_v1_base {
- @Override public String Wkr_key() {return KEY;} public static final String KEY = "import.sql.category_v1";
+ @Override public String Wkr_key() {return Xob_cmd_keys.Key_text_cat_core_v1;}
@Override public Io_sort_cmd Make_sort_cmd() {return new Xob_ctg_v1_sql_make(wiki);}
}
class Xob_ctg_v1_sql_make implements Io_make_cmd {
- public Xob_ctg_v1_sql_make(Xowe_wiki wiki) {this.wiki = wiki; db_mgr = wiki.Db_mgr_as_sql();} private Xowe_wiki wiki; Xodb_mgr_sql db_mgr;
+ private Gfo_fld_rdr fld_rdr = Gfo_fld_rdr.xowa_(); private Xob_tmp_wtr sql_wtr; private Gfo_usr_dlg usr_dlg; private boolean is_first = true;
+ private byte[] prv_ctg_name = Bry_.Empty; private int prv_page_id = 0;
+ private Xowe_wiki wiki; private Xodb_mgr_sql db_mgr; private int page_count = 0; private int progress_interval = 10000;
+ private final Bry_fmtr fmtr = Bry_fmtr.new_("(~{page_id},'~{cat_name}','','','','','~{cat_type}')\n", "page_id", "cat_name", "cat_type");
+ public Xob_ctg_v1_sql_make(Xowe_wiki wiki) {this.wiki = wiki; db_mgr = wiki.Db_mgr_as_sql();}
public Io_sort_cmd Make_dir_(Io_url v) {return this;} // ignore
public void Sort_bgn() {
usr_dlg = wiki.Appe().Usr_dlg();
Io_url sql_url = wiki.Fsys_mgr().Root_dir().GenSubFil(Url_sql);
Io_mgr._.DeleteFil_args(sql_url).MissingFails_off().Exec();
sql_wtr = Xob_tmp_wtr.new_wo_ns_(Io_url_gen_.fil_(sql_url), Io_mgr.Len_mb);
- sql_wtr.Bfr().Add_str(Xob_categorylinks_sql.Tbl_categorylinks).Add(Sql_hdr);
- } Gfo_fld_rdr fld_rdr = Gfo_fld_rdr.xowa_(); Gfo_fld_wtr fld_wtr = Gfo_fld_wtr.xowa_(); Xob_tmp_wtr sql_wtr; Gfo_usr_dlg usr_dlg; boolean is_first = true;
- public byte Line_dlm() {return line_dlm;} public Xob_ctg_v1_sql_make Line_dlm_(byte v) {line_dlm = v; return this;} private byte line_dlm = Byte_ascii.Nil;
- private byte[] prv_ctg_name = Bry_.Empty; int prv_page_id = 0;
+ sql_wtr.Bfr().Add_str(Xob_categorylinks_sql.Sql_categorylinks).Add(Sql_hdr);
+ }
public void Sort_do(Io_line_rdr rdr) {
- if (line_dlm == Byte_ascii.Nil) line_dlm = rdr.Line_dlm();
+ if (page_count++ % progress_interval == 0) usr_dlg.Prog_many("", "", "building category; count=~{0}", page_count);
fld_rdr.Ini(rdr.Bfr(), rdr.Itm_pos_bgn());
byte[] ctg_name = fld_rdr.Read_bry_escape();
ctg_name = Escape_for_sql(wiki, ctg_name);
@@ -54,7 +56,6 @@ class Xob_ctg_v1_sql_make implements Io_make_cmd {
db_mgr.Category_version_update(true);
}
private static final byte[] Sql_hdr = Bry_.new_ascii_("INSERT INTO 'categorylinks' VALUES");
- 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__bfr_mkr().Get_b512();
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_sql_tst.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_ctg_v1_sql_tst.java
similarity index 89%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_sql_tst.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_ctg_v1_sql_tst.java
index 4aa20d1ba..d6908a5ce 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_sql_tst.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_ctg_v1_sql_tst.java
@@ -15,8 +15,9 @@ 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 .
*/
-package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
-import org.junit.*; import gplx.dbs.*; import gplx.xowa.specials.search.*; import gplx.xowa.bldrs.imports.ctgs.*;
+package gplx.xowa.bldrs.cmds.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import org.junit.*; import gplx.dbs.*; import gplx.xowa.specials.search.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.texts.*;
+import gplx.xowa.bldrs.cmds.texts.sqls.*;
public class Xob_ctg_v1_sql_tst {
@Before public void init() {if (Xoa_test_.Db_skip()) return; fxt.Ctor_fsys();} Db_mgr_fxt fxt = new Db_mgr_fxt();
@After public void term() {if (Xoa_test_.Db_skip()) return; fxt.Rls();}
@@ -31,7 +32,7 @@ public class Xob_ctg_v1_sql_tst {
, fxt.doc_wo_date_(5, "E" , "[[Category:Ctg_a'b]]")
, fxt.doc_wo_date_(6, "F" , "[[Category:Ctg_a\\]]")
)
- .Exec_run(new Xob_page_sql(fxt.Bldr(), fxt.Wiki()))
+ .Exec_run(new Xob_page_cmd(fxt.Bldr(), fxt.Wiki()))
.Exec_run(new Xob_ctg_v1_sql().Ctor(fxt.Bldr(), fxt.Wiki()))
;
fxt.Test_file(Xoa_test_.Url_root().GenSubFil_nest("root", "wiki", "en.wikipedia.org", "xowa_categorylinks.sql").Raw(), String_.Concat_lines_nl
@@ -62,7 +63,7 @@ public class Xob_ctg_v1_sql_tst {
fxt.doc_ary_
( fxt.doc_wo_date_(1, "A" , "[[Category:Ctg_0]] [[Category:Ctg_0]]")
)
- .Exec_run(new Xob_page_sql(fxt.Bldr(), fxt.Wiki()))
+ .Exec_run(new Xob_page_cmd(fxt.Bldr(), fxt.Wiki()))
.Exec_run(new Xob_ctg_v1_sql().Ctor(fxt.Bldr(), fxt.Wiki()))
;
fxt.Test_file(Xoa_test_.Url_root().GenSubFil_nest("root", "wiki", "en.wikipedia.org", "xowa_categorylinks.sql").Raw(), String_.Concat_lines_nl
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_txt.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_ctg_v1_txt.java
similarity index 78%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_txt.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_ctg_v1_txt.java
index aaad0cfcc..aa66f2967 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_txt.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_ctg_v1_txt.java
@@ -15,9 +15,9 @@ 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 .
*/
-package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
+package gplx.xowa.bldrs.cmds.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
import gplx.ios.*;
public class Xob_ctg_v1_txt extends Xob_ctg_v1_base {
- @Override public String Wkr_key() {return KEY;} public static final String KEY = "core.make_category";
+ @Override public String Wkr_key() {return Xob_cmd_keys.Key_tdb_make_category;}
@Override public Io_sort_cmd Make_sort_cmd() {return new Xob_make_cmd_site(bldr.Usr_dlg(), make_dir, make_fil_len);}
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_sql_join_mgr.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_sql_join_mgr.java
similarity index 89%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_sql_join_mgr.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_sql_join_mgr.java
index 3c366f91c..4052258c3 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_sql_join_mgr.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_sql_join_mgr.java
@@ -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 .
*/
-package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
+package gplx.xowa.bldrs.cmds.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
import gplx.ios.*;
interface Xob_sql_join_wkr {
Io_line_rdr New_main_rdr();
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_base.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xoctg_hiddencat_parser_base.java
similarity index 93%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_base.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xoctg_hiddencat_parser_base.java
index f9c694cbc..2c80f4610 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_base.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xoctg_hiddencat_parser_base.java
@@ -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 .
*/
-package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
+package gplx.xowa.bldrs.cmds.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
import gplx.ios.*;
public abstract class Xoctg_hiddencat_parser_base extends Xob_sql_dump_base implements Sql_file_parser_cmd {
public Xoctg_hiddencat_parser_base Ctor(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki); this.make_fil_len = Io_mgr.Len_mb; return this;}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_sql.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xoctg_hiddencat_parser_sql.java
similarity index 66%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_sql.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xoctg_hiddencat_parser_sql.java
index 6ca7f704e..040a05c8a 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_sql.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xoctg_hiddencat_parser_sql.java
@@ -15,29 +15,25 @@ 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 .
*/
-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.*;
+package gplx.xowa.bldrs.cmds.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.wikis.data.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";
+ private Xowd_cat_core_tbl tbl;
+ public Xoctg_hiddencat_parser_sql(Xob_bldr bldr, Xowe_wiki wiki) {this.Ctor(bldr, wiki);}
+ @Override public String Cmd_key() {return Xob_cmd_keys.Key_text_cat_hidden;}
@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();
- 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);
+ tbl = db_mgr.Core_data_mgr().Db__cat_core().Tbl__cat_core();
+ tbl.Update_bgn();
}
- private Xodb_category_tbl tbl; private Db_stmt stmt;
@Override public void Exec_hook(Bry_bfr file_bfr, int cur_id, boolean cur_is_hiddencat) {
if (cur_is_hiddencat)
- tbl.Update(stmt, cur_id, cur_is_hiddencat ? Bool_.Y_byte : Bool_.N_byte);
+ tbl.Update_by_batch(cur_id, cur_is_hiddencat ? Bool_.Y_byte : Bool_.N_byte);
}
@Override public void Cmd_end() {
- if (stmt == null) return; // stmt is null when ctg fails (for example, category files not downloaded); DATE:2013-12-20
- conn.Txn_mgr().Txn_end_all();
+ tbl.Update_end();
if (!Env_.Mode_testing()) // NOTE: do not delete when testing
Io_mgr._.DeleteDirDeep(wiki.Fsys_mgr().Tmp_dir()); // delete /wiki/wiki_name/tmp
Io_url[] sql_files = Io_mgr._.QueryDir_args(wiki.Fsys_mgr().Root_dir()).FilPath_("*.sql.gz").ExecAsUrlAry();
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_sql_tst.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xoctg_hiddencat_parser_sql_tst.java
similarity index 73%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_sql_tst.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xoctg_hiddencat_parser_sql_tst.java
index c7aba883e..0bca92c39 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_sql_tst.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xoctg_hiddencat_parser_sql_tst.java
@@ -15,14 +15,15 @@ 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 .
*/
-package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
-import org.junit.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*;
+package gplx.xowa.bldrs.cmds.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import org.junit.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.bldrs.*;
public class Xoctg_hiddencat_parser_sql_tst {
@Before public void init() {if (Xoa_test_.Db_skip()) return; fxt.Ctor_fsys();} Db_mgr_fxt fxt = new Db_mgr_fxt();
@After public void term() {if (Xoa_test_.Db_skip()) return; fxt.Rls();}
@Test public void Basic() {
if (Xoa_test_.Db_skip()) return;
fxt.Init_db_sqlite();
+ fxt.Wiki().Db_mgr_as_sql().Core_data_mgr().Db__cat_core().Tbl__cat_core().Create_tbl();
Init_ctgs(1, 2, 3);
Io_url page_props_url = Xoa_test_.Url_root().GenSubFil_nest("root", "wiki", "en.wikipedia.org", "page_props.sql");
fxt .Init_fil(page_props_url, String_.Concat
@@ -39,23 +40,21 @@ 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().Core_data_mgr().Conn_ctg();
- Db_stmt stmt = tbl.Insert_stmt(conn);
+ Xowd_cat_core_tbl tbl = fxt.Wiki().Db_mgr_as_sql().Core_data_mgr().Db__cat_core().Tbl__cat_core().Create_tbl();
+ tbl.Insert_bgn();
try {
for (int i = 0; i < len; i++) {
int ctg_id = ctgs[i];
- tbl.Insert(stmt, ctg_id, 0, 0, 0, Bool_.N_byte, 0);
+ tbl.Insert_cmd_by_batch(ctg_id, 0, 0, 0, Bool_.N_byte, 0);
}
- } finally {stmt.Rls();}
+ } finally {tbl.Insert_end();}
}
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().Core_data_mgr().Conn_ctg();
+ Xowd_cat_core_tbl tbl = fxt.Wiki().Db_mgr_as_sql().Core_data_mgr().Db__cat_core().Tbl__cat_core();
for (int i = 0; i < len; i++) {
int ctg_id = ctgs[i];
- Xodb_category_itm ctg_itm = tbl.Select(conn, ctg_id);
+ Xowd_category_itm ctg_itm = tbl.Select(ctg_id);
Tfds.Eq(expd_hidden, ctg_itm.Hidden(), Int_.Xto_str(ctg_id));
}
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_txt.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xoctg_hiddencat_parser_txt.java
similarity index 85%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_txt.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xoctg_hiddencat_parser_txt.java
index 1267ad489..e1252554a 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_txt.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xoctg_hiddencat_parser_txt.java
@@ -15,11 +15,11 @@ 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 .
*/
-package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
+package gplx.xowa.bldrs.cmds.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
import gplx.ios.*;
public class Xoctg_hiddencat_parser_txt extends Xoctg_hiddencat_parser_base {
public Xoctg_hiddencat_parser_txt(Xob_bldr bldr, Xowe_wiki wiki) {this.Ctor(bldr, wiki);}
- @Override public String Cmd_key() {return KEY;} public static final String KEY = "ctg.hiddencat_sql";
+ @Override public String Cmd_key() {return Xob_cmd_keys.Key_tdb_cat_hidden_sql;}
@Override public void Cmd_bgn_hook(Xob_bldr bldr, Sql_file_parser parser) {
super.Cmd_bgn_hook(bldr, parser);
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_ttl_wkr.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xoctg_hiddencat_ttl_wkr.java
similarity index 85%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_ttl_wkr.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xoctg_hiddencat_ttl_wkr.java
index db1754fe6..bbeeb241c 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_ttl_wkr.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xoctg_hiddencat_ttl_wkr.java
@@ -15,15 +15,15 @@ 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 .
*/
-package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
-import gplx.ios.*; import gplx.xowa.tdbs.*;
+package gplx.xowa.bldrs.cmds.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.ios.*; import gplx.xowa.tdbs.*; import gplx.xowa.bldrs.*;
public class Xoctg_hiddencat_ttl_wkr extends Xob_itm_dump_base implements Xob_cmd, GfoInvkAble {
public Xoctg_hiddencat_ttl_wkr(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki); this.make_fil_len = Io_mgr.Len_mb;} private Xob_sql_join_wkr_ctg_hidden join_wkr;
- public String Cmd_key() {return KEY;} public static final String KEY = "ctg.hiddencat_ttl";
- public void Cmd_ini(Xob_bldr bldr) {}
+ public String Cmd_key() {return Xob_cmd_keys.Key_tdb_cat_hidden_ttl;}
+ public void Cmd_init(Xob_bldr bldr) {}
public void Cmd_bgn(Xob_bldr bldr) {
- this.Init_dump(KEY);
- src_sql_dir = wiki.Fsys_mgr().Tmp_dir().GenSubDir_nest(Xoctg_hiddencat_parser_txt.KEY, "make");
+ this.Init_dump(Xob_cmd_keys.Key_tdb_cat_hidden_ttl);
+ src_sql_dir = wiki.Fsys_mgr().Tmp_dir().GenSubDir_nest(Xob_cmd_keys.Key_tdb_cat_hidden_sql, "make");
join_wkr = new Xob_sql_join_wkr_ctg_hidden(bldr.App(), wiki, temp_dir, src_sql_dir);
} Io_url src_sql_dir;
public void Cmd_run() {
@@ -35,7 +35,7 @@ public class Xoctg_hiddencat_ttl_wkr extends Xob_itm_dump_base implements Xob_cm
Xobdc_merger.Basic(bldr.Usr_dlg(), join_wkr.Dump_url_gen(), temp_dir.GenSubDir("sort"), sort_mem_len, Io_sort_split_itm_sorter._, Io_line_rdr_key_gen_.first_pipe, new Io_sort_fil_basic(bldr.Usr_dlg(), make_url_gen, make_fil_len));
if (delete_temp) Io_mgr._.DeleteDirDeep(src_sql_dir);
}
- public void Cmd_print() {}
+ public void Cmd_term() {}
}
class Xob_sql_join_wkr_ctg_hidden implements Xob_sql_join_wkr {
public Xob_sql_join_wkr_ctg_hidden(Xoae_app app, Xowe_wiki wiki, Io_url temp_dir, Io_url src_sql_dir) {
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_ttl_wkr_tst.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xoctg_hiddencat_ttl_wkr_tst.java
similarity index 85%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_ttl_wkr_tst.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xoctg_hiddencat_ttl_wkr_tst.java
index 8e9fe19b0..72efdbd76 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_ttl_wkr_tst.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xoctg_hiddencat_ttl_wkr_tst.java
@@ -15,8 +15,8 @@ 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 .
*/
-package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
-import org.junit.*;
+package gplx.xowa.bldrs.cmds.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import org.junit.*; import gplx.xowa.bldrs.*;
public class Xoctg_hiddencat_ttl_wkr_tst {
@Before public void init() {fxt.Clear();} private Xob_base_fxt fxt = new Xob_base_fxt();
@Test public void Basic() {
@@ -31,7 +31,7 @@ public class Xoctg_hiddencat_ttl_wkr_tst {
, "!!!!#|C"
, "!!!!%|A"
))
- .Exec_cmd(Xoctg_hiddencat_ttl_wkr.KEY)
+ .Exec_cmd(Xob_cmd_keys.Key_tdb_cat_hidden_ttl)
.Test_fil("mem/xowa/wiki/en.wikipedia.org/tmp/ctg.hiddencat_ttl/dump/0000000000.csv", String_.Concat_lines_nl
( "C|!!!!#"
, "A|!!!!%"
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_link_idx_wkr.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xoctg_link_idx_wkr.java
similarity index 94%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_link_idx_wkr.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xoctg_link_idx_wkr.java
index e87b1a64e..99b8fbf61 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_link_idx_wkr.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xoctg_link_idx_wkr.java
@@ -15,15 +15,15 @@ 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 .
*/
-package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
+package gplx.xowa.bldrs.cmds.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
import gplx.core.flds.*; import gplx.ios.*; import gplx.xowa.ctgs.*; import gplx.xowa.tdbs.*;
public class Xoctg_link_idx_wkr extends Xob_idx_base { // NOTE: similar functionality to Xob_make_cmd_site, but more complicated due to p,f,s; not inheriting
Io_url src_link_dir; int make_fil_max = Int_.MinValue;
public Xoctg_link_idx_wkr(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
- @Override public String Cmd_key() {return KEY;} public static final String KEY = "ctg.link_idx";
+ @Override public String Cmd_key() {return Xob_cmd_keys.Key_tdb_ctg_link_idx;}
@Override public void Cmd_bgn_hook() {
this.fld_rdr = this.Fld_rdr();
- if (src_link_dir == null) src_link_dir = wiki.Fsys_mgr().Tmp_dir().GenSubDir_nest(Xob_categorylinks_txt.KEY, "make");
+ if (src_link_dir == null) src_link_dir = wiki.Fsys_mgr().Tmp_dir().GenSubDir_nest(Xob_cmd_keys.Key_tdb_text_cat_link, "make");
if (make_fil_max == Int_.MinValue) make_fil_max = Io_mgr.Len_mb;
make_link_mgr = new Xoctg_make_link_mgr(usr_dlg, make_fil_max, wiki.Tdb_fsys_mgr());
make_main_mgr = new Xoctg_make_main_mgr(usr_dlg, make_fil_max, wiki.Tdb_fsys_mgr());
@@ -160,7 +160,7 @@ class Xoctg_make_main_mgr {
make_fld_wtr = Gfo_fld_wtr.xowa_().Bfr_(make_fil_bfr);
make_dir = fsys_mgr.Url_site_dir(Xotdb_dir_info_.Tid_category2_main);
make_cmd = new Xob_make_cmd_site(usr_dlg, make_dir, make_fil_max);
- src_dir = fsys_mgr.Tmp_dir().GenSubDir_nest(Xoctg_hiddencat_ttl_wkr.KEY, "make");
+ src_dir = fsys_mgr.Tmp_dir().GenSubDir_nest(Xob_cmd_keys.Key_tdb_cat_hidden_ttl, "make");
hidden_rdr = new Io_line_rdr(usr_dlg, Io_mgr._.QueryDir_fils(src_dir));
} Gfo_fld_wtr make_fld_wtr; Bry_bfr make_fil_bfr; int make_fil_max; Xob_make_cmd_site make_cmd; Io_line_rdr hidden_rdr;
public Io_url Src_dir() {return src_dir;} Io_url src_dir;
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_link_idx_wkr_tst.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xoctg_link_idx_wkr_tst.java
similarity index 87%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_link_idx_wkr_tst.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xoctg_link_idx_wkr_tst.java
index 3f0c56d5c..b5b90f899 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_link_idx_wkr_tst.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xoctg_link_idx_wkr_tst.java
@@ -15,8 +15,8 @@ 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 .
*/
-package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
-import org.junit.*; import gplx.xowa.ctgs.*;
+package gplx.xowa.bldrs.cmds.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import org.junit.*; import gplx.xowa.ctgs.*; import gplx.xowa.bldrs.*;
public class Xoctg_link_idx_wkr_tst {
@Before public void init() {fxt.Clear();} private Xob_base_fxt fxt = new Xob_base_fxt();
@Test public void Basic() {
@@ -31,7 +31,7 @@ public class Xoctg_link_idx_wkr_tst {
.Init_fil("mem/xowa/wiki/en.wikipedia.org/tmp/ctg.hiddencat_ttl/make/0000000000.csv", String_.Concat_lines_nl
( "Ctg_2|!!!!%|"
))
- .Exec_cmd(Xoctg_link_idx_wkr.KEY, GfoMsg_.basic_(Xoctg_link_idx_wkr.Invk_make_fil_max_, 72))
+ .Exec_cmd(Xob_cmd_keys.Key_tdb_ctg_link_idx, GfoMsg_.basic_(Xoctg_link_idx_wkr.Invk_make_fil_max_, 72))
.Test_fil("mem/xowa/wiki/en.wikipedia.org/site/category2/link/00/00/00/00/0000000000.xdat", String_.Concat_lines_nl
( "!!!\"(|"
, "Ctg_1|!!!!4|!!!!3|!!!!?|!!!!@;#8DDL;Ctg_1a|!!!!#;#8DDL;A.png|!!!!$;#8DDL;A0|!!!!%;#8DDL;A1|"
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_diff_regy_exec_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_diff_regy_exec_cmd.java
similarity index 78%
rename from 400_xowa/src/gplx/xowa/bldrs/files/Xob_diff_regy_exec_cmd.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_diff_regy_exec_cmd.java
index a9b897ee9..5f65905ae 100644
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_diff_regy_exec_cmd.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_diff_regy_exec_cmd.java
@@ -15,18 +15,18 @@ 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 .
*/
-package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.dbs.*; import gplx.xowa.bldrs.oimgs.*;
-import gplx.fsdb.*; import gplx.fsdb.meta.*;
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*; import gplx.fsdb.*; import gplx.fsdb.meta.*;
+import gplx.xowa.bldrs.*;
public class Xob_diff_regy_exec_cmd extends Xob_itm_basic_base implements Xob_cmd {
private Io_url sql_dir;
public Xob_diff_regy_exec_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
- public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.diff_regy.exec";
- public void Cmd_ini(Xob_bldr bldr) {}
+ public String Cmd_key() {return Xob_cmd_keys.Key_diff_regy_exec;}
+ public void Cmd_init(Xob_bldr bldr) {}
public void Cmd_bgn(Xob_bldr bldr) {}
public void Cmd_run() {Exec_main();}
public void Cmd_end() {}
- public void Cmd_print() {}
+ public void Cmd_term() {}
private void Exec_main() {
if (sql_dir == null)
sql_dir = wiki.Ctx().App().Fsys_mgr().File_dir().GenSubDir_nest(wiki.Domain_str(), "tmp_sql");
@@ -35,7 +35,7 @@ public class Xob_diff_regy_exec_cmd extends Xob_itm_basic_base implements Xob_cm
int urls_len = urls.length;
for (int i = 0; i < urls_len; ++i)
runner.Exec(app, urls[i]);
- Xob_diff_regy_sql_runner.Get_provider(wiki, 0, Fsdb_db_tid_.Tid_atr).Exec_sql("VACUUM;");
+ Xob_diff_regy_sql_runner.Get_conn(wiki, 0, Fsdb_db_tid_.Tid_atr).Exec_sql("VACUUM;");
}
@Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_sql_dir_)) sql_dir = m.ReadIoUrl("v");
@@ -62,23 +62,23 @@ class Xob_diff_regy_sql_runner {
public void Run_sql(Xoae_app app) {
Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_null(Bry_.new_utf8_(wiki_domain));
app.Usr_dlg().Prog_many("", "", "running sql: url=~{0}", url.NameAndExt());
- Db_conn conn = Get_provider(wiki, fsdb_db_id, fsdb_db_tid);
+ Db_conn conn = Get_conn(wiki, fsdb_db_id, fsdb_db_tid);
conn.Exec_sql(Io_mgr._.LoadFilStr(url));
if (fsdb_db_tid == Fsdb_db_tid_.Tid_bin)
conn.Exec_sql("VACUUM;");
}
- public static Db_conn Get_provider(Xowe_wiki wiki, int fsdb_db_id, byte fsdb_db_tid) {
- wiki.File_mgr().Fsdb_mgr().Init_by_wiki(wiki);
- Fsm_abc_mgr abc_mgr = wiki.File_mgr().Fsdb_mgr().Mnt_mgr().Mnts__at(0);
+ public static Db_conn Get_conn(Xowe_wiki wiki, int fsdb_db_id, byte fsdb_db_tid) {
+ wiki.File_mgr().Init_file_mgr_by_load(wiki);
+ Fsm_mnt_itm abc_mgr = wiki.File_mgr().Fsdb_mgr().Mnt_mgr().Mnts__get_main();
if (fsdb_db_tid == Fsdb_db_tid_.Tid_bin)
- return abc_mgr.Bin_mgr().Get_at(fsdb_db_id).Conn();
+ return abc_mgr.Bin_mgr().Dbs__get_at(fsdb_db_id).Conn();
else if (fsdb_db_tid == Fsdb_db_tid_.Tid_atr)
- return abc_mgr.Atr_mgr().Get_at(0).Conn();
+ return abc_mgr.Atr_mgr().Db__core().Conn();
else
throw Err_.unhandled(fsdb_db_tid);
}
public static String Build_url(String wiki_domain, int fsdb_db_id, String fsdb_db_type) {
- return String_.Format("{0}-{1}-{2}.sql", wiki_domain, Int_.Xto_str_pad_bgn(fsdb_db_id, 3), fsdb_db_type);
+ return String_.Format("{0}-{1}-{2}.sql", wiki_domain, Int_.Xto_str_pad_bgn_zero(fsdb_db_id, 3), fsdb_db_type);
}
}
class Fsdb_db_tid_ {
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_diff_regy_exec_cmd_tst.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_diff_regy_exec_cmd_tst.java
similarity index 92%
rename from 400_xowa/src/gplx/xowa/bldrs/files/Xob_diff_regy_exec_cmd_tst.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_diff_regy_exec_cmd_tst.java
index 966abb50f..58420633f 100644
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_diff_regy_exec_cmd_tst.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_diff_regy_exec_cmd_tst.java
@@ -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 .
*/
-package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
import org.junit.*;
import gplx.fsdb.*;
public class Xob_diff_regy_exec_cmd_tst {
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_diff_regy_make_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_diff_regy_make_cmd.java
similarity index 91%
rename from 400_xowa/src/gplx/xowa/bldrs/files/Xob_diff_regy_make_cmd.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_diff_regy_make_cmd.java
index f275ca927..e1a0300b0 100644
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_diff_regy_make_cmd.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_diff_regy_make_cmd.java
@@ -15,19 +15,18 @@ 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 .
*/
-package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.dbs.*; import gplx.fsdb.*; import gplx.xowa.bldrs.oimgs.*;
-import gplx.dbs.engines.sqlite.*;
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*; import gplx.fsdb.*; import gplx.dbs.engines.sqlite.*;
public class Xob_diff_regy_make_cmd extends Xob_itm_basic_base implements Xob_cmd {
public Xob_diff_regy_make_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
- public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.diff_regy.make";
- public void Cmd_ini(Xob_bldr bldr) {}
+ public String Cmd_key() {return Xob_cmd_keys.Key_diff_regy_make;}
+ public void Cmd_init(Xob_bldr bldr) {}
public void Cmd_bgn(Xob_bldr bldr) {}
public void Cmd_run() {Exec_main();}
public void Cmd_end() {}
- public void Cmd_print() {}
+ public void Cmd_term() {}
private void Exec_main() {
- Db_conn make_db_provider = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
+ Db_conn make_db_provider = Xob_db_file.new__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
this.Make_join_indexes(make_db_provider);
this.Make_diff_regy(make_db_provider);
this.Make_delete_sql(make_db_provider);
@@ -73,7 +72,7 @@ public class Xob_diff_regy_make_cmd extends Xob_itm_basic_base implements Xob_cm
private void Make_delete_sql_file(Bry_bfr bfr, Io_url sql_dir, int db_id, int cur_count, byte db_tid) {
if (db_id != -1 && cur_count > 0) { // do not write 1st bfr
bfr.Add_str("COMMIT;\n");
- String sql_url_name = String_.Format("{0}-{1}-{2}.sql", wiki.Domain_str(), Int_.Xto_str_pad_bgn(db_id, 3), Fsdb_db_tid_.Xto_key(db_tid));
+ String sql_url_name = String_.Format("{0}-{1}-{2}.sql", wiki.Domain_str(), Int_.Xto_str_pad_bgn_zero(db_id, 3), Fsdb_db_tid_.Xto_key(db_tid));
Io_url sql_url = sql_dir.GenSubFil(sql_url_name);
Io_mgr._.SaveFilBfr(sql_url, bfr);
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_fsdb_make_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_fsdb_make_cmd.java
new file mode 100644
index 000000000..471399e79
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_fsdb_make_cmd.java
@@ -0,0 +1,357 @@
+/*
+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 .
+*/
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.dbs.engines.sqlite.*;
+import gplx.xowa.wikis.*; import gplx.xowa.wikis.data.*; import gplx.xowa.dbs.*; import gplx.fsdb.*; import gplx.ios.*; import gplx.xowa.wikis.data.tbls.*;
+import gplx.xowa.files.*; import gplx.xowa.files.repos.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.fsdb.*;
+import gplx.fsdb.data.*; import gplx.fsdb.meta.*;
+public class Xob_fsdb_make_cmd extends Xob_itm_basic_base implements Xob_cmd {
+ private Db_conn bldr_conn; private Db_cfg_tbl bldr_cfg_tbl;
+ private Xof_bin_mgr src_bin_mgr; private Xof_bin_wkr__fsdb_sql src_fsdb_wkr; private boolean src_bin_mgr__cache_enabled = Bool_.N; private String src_bin_mgr__fsdb_version; private boolean src_bin_mgr__wmf_enabled;
+ private Fsm_mnt_itm trg_mnt_itm; private Fsm_cfg_mgr trg_cfg_mgr; private Fsm_atr_fil trg_atr_fil; private Fsm_bin_fil trg_bin_fil; private long trg_bin_db_max;
+ private final Xof_bin_updater trg_bin_updater = new Xof_bin_updater(); private Xob_tier_namer tier_namer; private int[] ns_ids; private int prv_lnki_tier_id = -1;
+ private long download_size_max = Io_mgr.Len_mb_long; private int[] download_keep_tier_ids = Int_.Ary(0);
+ private Xobu_poll_mgr poll_mgr; private int poll_interval; private long time_bgn;
+ private int select_interval = 2500, progress_interval = 1, commit_interval = 1, delete_interval = 5000;
+ private boolean exec_done, resume_enabled; private int exec_count, exec_count_max = Int_.MaxValue, exec_fail, exec_fail_max = 10000; // 115 errors over 900k images
+ private int tier_id_bmk = -1, tier_id_val = -1; private int page_id_bmk = -1, page_id_val = -1, page_id_end = Int_.MaxValue; private int lnki_id_bmk = -1, lnki_id_val = -1;
+ private boolean exit_after_commit, exit_now;
+ public Xob_fsdb_make_cmd(Xob_bldr bldr, Xowe_wiki wiki) {
+ this.Cmd_ctor(bldr, wiki);
+ this.poll_mgr = new Xobu_poll_mgr(bldr.App());
+ wiki.File_mgr__fsdb_mode().Tid_make_y_();
+ this.src_bin_mgr = new Xof_bin_mgr(new Fsm_mnt_mgr(), wiki.File_mgr__repo_mgr(), app.File_mgr__cache_mgr(), app.File_mgr__img_mgr().Wkr_resize_img());
+ }
+ public String Cmd_key() {return Xob_cmd_keys.Key_file_fsdb_make;}
+ public void Cmd_bgn(Xob_bldr bldr) {
+ wiki.Init_assert();
+ this.poll_interval = poll_mgr.Poll_interval();
+ this.tier_namer = new Xob_tier_namer(wiki.Domain_str(), ns_ids);
+ // src_bin_mgr
+ if (src_bin_mgr__fsdb_version != null) {
+ this.src_fsdb_wkr = Xof_bin_wkr__fsdb_sql.new_(wiki.File_mgr__mnt_mgr());
+ src_bin_mgr.Wkrs__add(src_fsdb_wkr);
+ src_fsdb_wkr.Mnt_mgr().Ctor_by_load(new_src_bin_db_mgr(wiki, src_bin_mgr__fsdb_version));
+ src_fsdb_wkr.Mnt_mgr().Mnts__get_main().Txn_bgn(); // NOTE: txn on atr speeds up from 50 -> 300; DATE:2015-03-21
+ if (src_bin_mgr__cache_enabled) {
+ usr_dlg.Prog_many("", "", "src_bin_mgr.cache.bgn");
+ src_fsdb_wkr.Mnt_mgr().Mnts__get_main().Atr_mgr().Db__core().Fil_cache_enabled_y_();
+ usr_dlg.Prog_many("", "", "src_bin_mgr.cache.end");
+ }
+ }
+ if (src_bin_mgr__wmf_enabled) {
+ Xof_bin_wkr__http_wmf wmf_wkr = Xof_bin_wkr__http_wmf.new_(wiki);
+ src_bin_mgr.Wkrs__add(wmf_wkr);
+ wmf_wkr.Fail_timeout_(0); // 1000; NOTE: set Fail_timeout here; DATE:2014-06-21; NOTE: do not put in ctor, or else will be 1st wkr; DATE:2014-06-28
+ }
+ // trg_mnt_itm
+ this.trg_bin_db_max = app.Api_root().Bldr().Wiki().Import().File_db_max();
+ Fsdb_db_mgr trg_db_mgr = Fsdb_db_mgr_.new_detect(wiki.Domain_str(), wiki.Fsys_mgr().Root_dir(), wiki.Fsys_mgr().File_dir());
+ if (trg_db_mgr == null) trg_db_mgr = Fsdb_db_mgr__v2_bldr.I.Make(wiki);
+ Fsm_mnt_mgr trg_mnt_mgr = new Fsm_mnt_mgr(); trg_mnt_mgr.Ctor_by_load(trg_db_mgr);
+ trg_mnt_mgr.Mnts__get_insert_idx_(Fsm_mnt_mgr.Mnt_idx_main); // NOTE: do not delete; mnt_mgr default to Mnt_idx_user; DATE:2014-04-25
+ this.trg_mnt_itm = trg_mnt_mgr.Mnts__get_insert();
+ Fsm_mnt_mgr.Patch(trg_mnt_itm.Cfg_mgr().Tbl()); // NOTE: always patch again; fsdb_make may be run separately without lnki_temp; DATE:2014-04-26
+ this.trg_atr_fil = trg_mnt_itm.Atr_mgr().Db__core();
+ this.trg_cfg_mgr = trg_mnt_itm.Cfg_mgr();
+ trg_atr_fil.Conn().Txn_bgn();
+ // bldr_db
+ Xob_db_file bldr_db = Xob_db_file.new__file_make(wiki.Fsys_mgr().Root_dir());
+ this.bldr_conn = bldr_db.Conn();
+ this.bldr_cfg_tbl = bldr_db.Tbl__cfg(); // NOTE: cfg and atr is in same db; use it
+ bldr_cfg_tbl.Conn().Txn_bgn();
+ }
+ public void Cmd_run() {
+ Init_bldr_bmks();
+ this.time_bgn = Env_.TickCount();
+ int total_pending = Xob_xfer_regy_tbl.Select_total_pending(bldr_conn);
+ // if (total_pending > 250000 && src_bin_mgr__fsdb_version == null)
+ usr_dlg.Note_many("", "", "total pending: ~{0}", total_pending);
+ ListAdp list = ListAdp_.new_();
+ boolean loop = true;
+ while (loop) {
+ byte rslt = Select_fsdb_itms(list);
+ switch (rslt) {
+ case Select_rv_stop:
+ if (tier_namer.Is_last(tier_id_val))
+ loop = false;
+ else {
+ ++tier_id_val;
+ page_id_val = 0;
+ continue;
+ }
+ break;
+ case Select_rv_next_page: ++page_id_val; lnki_id_val = 0; continue;
+ case Select_rv_process: break;
+ }
+ if (!loop) break; // no more ttls found
+ int len = list.Count();
+ usr_dlg.Prog_many("", "", "fetched pages: ~{0}", len);
+ for (int i = 0; i < len; ++i) {
+ Xodb_tbl_oimg_xfer_itm fsdb = (Xodb_tbl_oimg_xfer_itm)list.FetchAt(i);
+ Download_itm(fsdb);
+ if ( exit_now
+ || exec_count >= exec_count_max
+ || exec_fail >= exec_fail_max
+ || page_id_val >= page_id_end
+ ) {
+ this.Txn_sav();
+ return;
+ }
+ }
+ }
+ exec_done = true;
+ }
+ public void Cmd_end() {
+ usr_dlg.Note_many("", "", "fsdb_make.done: count=~{0} rate=~{1}", exec_count, DecimalAdp_.divide_safe_(exec_count, Env_.TickCount_elapsed_in_sec(time_bgn)).Xto_str("#,###.000"));
+ src_fsdb_wkr.Mnt_mgr().Mnts__get_main().Txn_end();
+ trg_atr_fil.Conn().Txn_end(); trg_atr_fil.Conn().Rls_conn();
+ if (!trg_mnt_itm.Db_mgr().File__solo_file()) {
+ trg_bin_fil.Conn().Txn_end(); trg_bin_fil.Conn().Rls_conn();
+ }
+ if (exec_done) {
+ bldr_cfg_tbl.Delete_grp(Cfg_fsdb_make); // delete bmks for future reruns; DATE:2014-08-20
+ Io_mgr._.DeleteFil_args(wiki.Fsys_mgr().Root_dir().GenSubFil("xowa.file.make.cfg.gfs")).MissingFails_off().Exec();
+ }
+ bldr_conn.Rls_conn();
+ }
+ private void Init_bldr_bmks() {
+ if (!resume_enabled) // clear cfg entries if resume disabled; note that disabled by default; DATE:2014-10-24
+ bldr_cfg_tbl.Delete_grp(Cfg_fsdb_make);
+ Db_cfg_hash bmk_hash = bldr_cfg_tbl.Select_as_hash(Cfg_fsdb_make);
+ String tier_id_str = bmk_hash.Get(Cfg_tier_id_bmk).To_str_or(null);
+ if (tier_id_str == null) { // bmks not found; new db;
+ bldr_conn.Txn_bgn();
+ bldr_cfg_tbl.Insert_int(Cfg_fsdb_make, Cfg_tier_id_bmk , tier_id_bmk);
+ bldr_cfg_tbl.Insert_int(Cfg_fsdb_make, Cfg_page_id_bmk , page_id_bmk);
+ bldr_cfg_tbl.Insert_int(Cfg_fsdb_make, Cfg_lnki_id_bmk , lnki_id_bmk);
+ bldr_conn.Txn_end();
+ if (tier_id_bmk == -1) tier_id_bmk = 0;
+ if (page_id_bmk == -1) page_id_bmk = 0;
+ if (lnki_id_bmk == -1) lnki_id_bmk = 0;
+ }
+ else {
+ if (tier_id_bmk == -1) {
+ tier_id_bmk = Int_.parse_(tier_id_str);
+ usr_dlg.Note_many("", "", "restoring from bmk: tier_id=~{0}", tier_id_bmk);
+ }
+ if (page_id_bmk == -1) {
+ page_id_bmk = bmk_hash.Get(Cfg_page_id_bmk).To_int();
+ usr_dlg.Note_many("", "", "restoring from bmk: page_id=~{0}", page_id_bmk);
+ }
+ if (lnki_id_bmk == -1) {
+ lnki_id_bmk = bmk_hash.Get(Cfg_lnki_id_bmk).To_int();
+ usr_dlg.Note_many("", "", "restoring from bmk: lnki_id=~{0}", lnki_id_bmk);
+ }
+ }
+ tier_id_val = tier_id_bmk;
+ page_id_val = page_id_bmk;
+ lnki_id_val = lnki_id_bmk;
+ }
+ private byte Select_fsdb_itms(ListAdp list) {
+ list.Clear();
+ boolean pages_found = false, links_found = false;
+ DataRdr rdr = Xob_xfer_regy_tbl.Select_by_tier_page(bldr_conn, tier_id_val, page_id_val, select_interval);
+ try {
+ while (rdr.MoveNextPeer()) {
+ pages_found = true; // at least one page found; set true
+ Xodb_tbl_oimg_xfer_itm itm = Xodb_tbl_oimg_xfer_itm.new_rdr_( rdr);
+ if ( itm.Lnki_page_id() == page_id_val // same page_id
+ && itm.Lnki_id() <= lnki_id_val // ... but lnki_id < last
+ )
+ continue; // ... ignore; note that select is by page_id, not page_id + link_id; needed else restarts would not resume exactly at same point;
+ links_found = true;
+ list.Add(itm);
+ }
+ } finally {rdr.Rls();}
+ if (pages_found && !links_found) return Select_rv_next_page; // pages found, but all links processed
+ else if (!pages_found) return Select_rv_stop; // no more pages found
+ else return Select_rv_process; // pages and links found
+ }
+ private void Download_itm(Xodb_tbl_oimg_xfer_itm fsdb) {
+ try {
+ tier_id_val = fsdb.Lnki_tier_id();
+ page_id_val = fsdb.Lnki_page_id();
+ lnki_id_val = fsdb.Lnki_id();
+ fsdb.Orig_repo_name_(fsdb.Orig_repo_id() == Xof_repo_itm.Repo_local ? wiki.Domain_bry() : Xow_domain_.Domain_bry_commons);
+ Download_exec(fsdb);
+ ++exec_count;
+ if (exec_count % progress_interval == 0) Print_progress(fsdb);
+ if (exec_count % poll_interval == 0) poll_mgr.Poll();
+ if (exec_count % commit_interval == 0) Txn_sav();
+ if (exec_count % delete_interval == 0) Delete_files();
+ }
+ catch (Exception exc) {
+ ++exec_fail;
+ usr_dlg.Warn_many("", "", "download error; ttl=~{0} w=~{1} err=~{2}", fsdb.Lnki_ttl(), fsdb.Lnki_w(), Err_.Message_gplx(exc));
+ }
+ }
+ private void Download_exec(Xodb_tbl_oimg_xfer_itm fsdb) {
+ Io_stream_rdr src_rdr = src_bin_mgr.Find_as_rdr(Xof_exec_tid.Tid_wiki_page, fsdb);
+ try {
+ if (src_rdr == Io_stream_rdr_.Null) { // download failed
+ ++exec_fail;
+ usr_dlg.Warn_many("", "", "failed: ttl=~{0}", String_.Format("[[File:{0}|{1}px]]", fsdb.Lnki_ttl(), fsdb.Html_w()));
+ Print_progress(fsdb);
+ }
+ else { // download passed
+ long src_rdr_len = src_rdr.Len();
+ int lnki_tier_id = fsdb.Lnki_tier_id();
+ if ( src_rdr_len > download_size_max
+ && !Int_.In(lnki_tier_id, download_keep_tier_ids)) {
+ usr_dlg.Warn_many("", "", "skipped; ttl=~{0} w=~{1} size=~{2} tier=~{3}", fsdb.Lnki_ttl(), fsdb.Lnki_w(), src_rdr_len, lnki_tier_id);
+ return;
+ }
+ if (trg_bin_fil == null) // no trg_bin_fil
+ Make_trg_bin_file(fsdb);
+ else if (trg_bin_fil.Bin_len() + src_rdr_len > trg_bin_db_max) // or trg_bin_fil is out of space
+ Make_trg_bin_file(fsdb);
+ else if (prv_lnki_tier_id != lnki_tier_id) {
+ if (prv_lnki_tier_id != -1)
+ Make_trg_bin_file(fsdb);
+ prv_lnki_tier_id = lnki_tier_id;
+ }
+ trg_bin_updater.Save_bin(trg_mnt_itm, trg_atr_fil, trg_bin_fil, fsdb, src_rdr, src_rdr_len);
+ }
+ }
+ finally {src_rdr.Rls();}
+ }
+ private void Make_trg_bin_file(Xodb_tbl_oimg_xfer_itm fsdb) {
+ if ( trg_bin_fil != null // null-check needed for 1st call
+ && !trg_mnt_itm.Db_mgr().File__solo_file()) // don't close if one file
+ trg_bin_fil.Conn().Txn_end(); // close txn
+ String trg_bin_fil_name = tier_namer.Gen_name_and_add(fsdb.Lnki_tier_id()); // gen name
+ this.trg_bin_fil = trg_mnt_itm.Bin_mgr().Dbs__make(trg_bin_fil_name); // create trg_bin_fil
+ if (!trg_mnt_itm.Db_mgr().File__solo_file()) {
+ Fsdb_db_file trg_bin_db = trg_mnt_itm.Db_mgr().File__bin_file__at(trg_mnt_itm.Id(), trg_bin_fil.Id(), trg_bin_fil_name);
+ Fsdb_db_mgr__v2_bldr.Make_cfg_data(wiki, trg_atr_fil.Url_rel(), trg_bin_db, Xowd_db_file_.Tid_file_data, trg_bin_fil.Id() + ListAdp_.Base1);
+ trg_bin_fil.Conn().Txn_bgn();
+ }
+ }
+ private void Txn_sav() {
+ usr_dlg.Prog_many("", "", "committing data: count=~{0} failed=~{1}", exec_count, exec_fail);
+ bldr_cfg_tbl.Update_int(Cfg_fsdb_make, Cfg_page_id_bmk, page_id_val);
+ bldr_cfg_tbl.Update_int(Cfg_fsdb_make, Cfg_lnki_id_bmk, lnki_id_val);
+ bldr_cfg_tbl.Conn().Txn_sav();
+ trg_cfg_mgr.Next_id_commit();
+ trg_atr_fil.Conn().Txn_sav();
+ if (!trg_mnt_itm.Db_mgr().File__solo_file())
+ trg_bin_fil.Conn().Txn_sav();
+ if (exit_after_commit) exit_now = true;
+ }
+ private void Print_progress(Xodb_tbl_oimg_xfer_itm itm) {
+ int time_elapsed = Env_.TickCount_elapsed_in_sec(time_bgn);
+ usr_dlg.Prog_many("", "", "prog: num=~{0} err=~{1} time=~{2} rate=~{3} page=~{4} lnki=~{5} ttl=~{6}", exec_count, exec_fail, time_elapsed, Math_.Div_safe_as_int(exec_count, time_elapsed), page_id_val, lnki_id_val, String_.new_utf8_(itm.Orig_ttl()));
+ }
+ private void Delete_files() {}// TODO: purge /xowa/file/ dir to free up hard disk space
+ public void Cmd_init(Xob_bldr bldr) {}
+ public void Cmd_term() {}
+ @Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
+ if (ctx.Match(k, Invk_tier_id_bmk_)) tier_id_bmk = m.ReadInt("v");
+ else if (ctx.Match(k, Invk_page_id_bmk_)) page_id_bmk = m.ReadInt("v");
+ else if (ctx.Match(k, Invk_lnki_id_bmk_)) lnki_id_bmk = m.ReadInt("v");
+ else if (ctx.Match(k, Invk_select_interval_)) select_interval = m.ReadInt("v");
+ else if (ctx.Match(k, Invk_commit_interval_)) commit_interval = m.ReadInt("v");
+ else if (ctx.Match(k, Invk_progress_interval_)) progress_interval = m.ReadInt("v");
+ else if (ctx.Match(k, Invk_delete_interval_)) delete_interval = m.ReadInt("v");
+ else if (ctx.Match(k, Invk_exec_count_max_)) exec_count_max = m.ReadInt("v");
+ else if (ctx.Match(k, Invk_exec_fail_max_)) exec_fail_max = m.ReadInt("v");
+ else if (ctx.Match(k, Invk_exit_after_commit_)) exit_after_commit = m.ReadYn("v");
+ else if (ctx.Match(k, Invk_exit_now_)) exit_now = m.ReadYn("v");
+ else if (ctx.Match(k, Invk_resume_enabled_)) resume_enabled = m.ReadYn("v");
+ else if (ctx.Match(k, Invk_ns_ids_)) ns_ids = Int_.Ary_parse(m.ReadStr("v"), "|");
+ else if (ctx.Match(k, Invk_src_bin_mgr__fsdb_version_)) src_bin_mgr__fsdb_version = m.ReadStr("v");
+ else if (ctx.Match(k, Invk_src_bin_mgr__wmf_enabled_)) src_bin_mgr__wmf_enabled = m.ReadYn("v");
+ else if (ctx.Match(k, Invk_src_bin_mgr__cache_enabled_)) src_bin_mgr__cache_enabled = m.ReadYn("v");
+ else if (ctx.Match(k, Invk_poll_mgr)) return poll_mgr;
+ else if (ctx.Match(k, Invk_download_keep_tier_ids)) download_keep_tier_ids = Int_.Ary_parse(m.ReadStr("v"), "|");
+ else if (ctx.Match(k, Invk_download_size_max)) download_size_max = Io_size_.To_long_by_msg_mb(m);
+ else return GfoInvkAble_.Rv_unhandled;
+ return this;
+ }
+ private static final String
+ Invk_tier_id_bmk_ = "tier_id_bmk_", Invk_page_id_bmk_ = "page_id_bmk_", Invk_lnki_id_bmk_ = "lnki_id_bmk_"
+ , Invk_select_interval_ = "select_interval_", Invk_commit_interval_ = "commit_interval_", Invk_progress_interval_ = "progress_interval_", Invk_delete_interval_ = "delete_interval_"
+ , Invk_exec_count_max_ = "exec_count_max_", Invk_exec_fail_max_ = "exec_fail_max_", Invk_exit_now_ = "exit_now_", Invk_exit_after_commit_ = "exit_after_commit_"
+ , Invk_resume_enabled_ = "resume_enabled_", Invk_poll_mgr = "poll_mgr"
+ , Invk_src_bin_mgr__fsdb_version_ = "src_bin_mgr__fsdb_version_"
+ , Invk_src_bin_mgr__wmf_enabled_ = "src_bin_mgr__wmf_enabled_"
+ , Invk_src_bin_mgr__cache_enabled_ = "src_bin_mgr__cache_enabled_", Invk_ns_ids_ = "ns_ids_"
+ , Invk_download_size_max = "download_size_max", Invk_download_keep_tier_ids = "download_keep_tier_ids"
+ ;
+ private static Fsdb_db_mgr new_src_bin_db_mgr(Xow_wiki wiki, String version) {
+ String domain_str = wiki.Domain_str();
+ Fsdb_db_mgr rv = null; Io_url url = null;
+ if (String_.Eq(version, "v1")) {
+ url = wiki.Fsys_mgr().File_dir().OwnerDir().GenSubDir(domain_str + "-prv"); // v1: EX: /xowa/file/en.wikipedia.org-prv/
+ rv = new Fsdb_db_mgr__v1(url);
+ }
+ else if (String_.Eq(version, "v2")) {
+ url = wiki.Fsys_mgr().Root_dir().GenSubDir("prv"); // v2: EX: /xowa/wiki/en.wikipedia.org/prv/
+ rv = Fsdb_db_mgr_.new_detect(domain_str, url, url); // note that v2 is prioritized over v1
+ }
+ else throw Err_.new_("fsdb.make:unknown fsdb_type; version={0}", version);
+ if (!Io_mgr._.ExistsFil(rv.File__mnt_file().Url())) throw Err_.new_("fsdb.make:source fsdb not found; version={0} url={1}", version, url.Raw());
+ return rv;
+ }
+ private static final byte Select_rv_stop = 0, Select_rv_process = 1, Select_rv_next_page = 2;
+ private static final String Cfg_fsdb_make = "bldr.fsdb_make", Cfg_tier_id_bmk = "tier_id_bmk", Cfg_page_id_bmk = "page_id_bmk", Cfg_lnki_id_bmk = "lnki_id_bmk";
+ public static byte Status_null = 0, Status_pass = 1, Status_fail = 2;
+}
+class Xodb_tbl_oimg_xfer_itm extends Xof_fsdb_itm { public int Lnki_id() {return lnki_id;} private int lnki_id;
+ public int Lnki_tier_id() {return lnki_tier_id;} private int lnki_tier_id;
+ public int Lnki_page_id() {return lnki_page_id;} private int lnki_page_id;
+ public static Xodb_tbl_oimg_xfer_itm new_rdr_(DataRdr rdr) {
+ Xodb_tbl_oimg_xfer_itm rv = new Xodb_tbl_oimg_xfer_itm();
+ rv.lnki_id = rdr.ReadInt(Xob_xfer_regy_tbl.Fld_lnki_id);
+ rv.lnki_page_id = rdr.ReadInt(Xob_xfer_regy_tbl.Fld_lnki_page_id);
+ rv.lnki_tier_id = rdr.ReadInt(Xob_xfer_regy_tbl.Fld_lnki_tier_id);
+ rv.Ctor_by_fsdb_make
+ ( rdr.ReadBryByStr(Xob_xfer_regy_tbl.Fld_lnki_ttl)
+ , rdr.ReadInt(Xob_xfer_regy_tbl.Fld_lnki_ext)
+ , rdr.ReadInt(Xob_xfer_regy_tbl.Fld_file_w), rdr.ReadInt(Xob_xfer_regy_tbl.Fld_file_h) // set lnki_size; Xof_bin_mgr uses lnki_size
+ , Xof_lnki_time.Db_load_double(rdr, Xob_xfer_regy_tbl.Fld_lnki_time)
+ , Xof_lnki_page.Db_load_int(rdr, Xob_xfer_regy_tbl.Fld_lnki_page)
+ , rdr.ReadByte(Xob_xfer_regy_tbl.Fld_orig_repo)
+ , rdr.ReadInt(Xob_xfer_regy_tbl.Fld_orig_w)
+ , rdr.ReadInt(Xob_xfer_regy_tbl.Fld_orig_h)
+ , Bry_.Empty
+ , rdr.ReadByte(Xob_xfer_regy_tbl.Fld_file_is_orig) == Bool_.Y_byte
+ );
+ return rv;
+ }
+}
+class Xob_tier_namer {
+ private final String domain_str; private final int[] ns_ids;
+ private final int[] db_ids;
+ public Xob_tier_namer(String domain_str, int[] ns_ids) {
+ this.domain_str = domain_str;
+ this.ns_ids = ns_ids;
+ this.db_ids = new int[ns_ids.length];
+ }
+ public boolean Is_last(int v) {return v >= ns_ids.length;}
+ public int Db_id(int tier_id) {return db_ids[tier_id];}
+ public String Gen_name_and_add(int tier_id) {// en.wikipedia.org-file-ns.000-db.0001.xowa
+ if (tier_id >= ns_ids.length) throw Err_.new_("unknown grp: tier_id={0} len={1}", tier_id, ns_ids.length);
+ String ns_id = Int_.Xto_str_pad_bgn_zero(ns_ids[tier_id], 3);
+ int db_id_int = db_ids[tier_id];
+ db_ids[tier_id] = db_id_int + 1;
+ String db_id = Int_.Xto_str_pad_bgn_zero(db_id_int + ListAdp_.Base1, 3);
+ return String_.Format("{0}-file-ns.{1}-db.{2}.xowa", domain_str, ns_id, db_id);
+ }
+}
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_regy_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_regy_cmd.java
similarity index 69%
rename from 400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_regy_cmd.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_regy_cmd.java
index e0021e35a..de2d9f37c 100644
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_regy_cmd.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_regy_cmd.java
@@ -15,18 +15,18 @@ 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 .
*/
-package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.bldrs.oimgs.*;
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*; import gplx.xowa.dbs.*;
public class Xob_lnki_regy_cmd extends Xob_itm_basic_base implements Xob_cmd {
public Xob_lnki_regy_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
- public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.lnki_regy";
- public void Cmd_ini(Xob_bldr bldr) {}
+ public String Cmd_key() {return Xob_cmd_keys.Key_file_lnki_regy;}
+ public void Cmd_init(Xob_bldr bldr) {}
public void Cmd_bgn(Xob_bldr bldr) {
- Db_conn conn = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
+ Db_conn conn = Xob_db_file.new__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
Xob_lnki_regy_tbl.Create_table(conn);
- Xob_lnki_regy_tbl.Create_data(usr_dlg, conn, Xob_lnki_temp_wkr.Wiki_ns_for_file_is_case_match_all(wiki));
+ Xob_lnki_regy_tbl.Create_data(usr_dlg, conn, Xob_lnki_temp_wkr.Ns_file_is_case_match_all(wiki));
}
public void Cmd_run() {}
public void Cmd_end() {}
- public void Cmd_print() {}
+ public void Cmd_term() {}
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_regy_tbl.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_regy_tbl.java
similarity index 85%
rename from 400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_regy_tbl.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_regy_tbl.java
index 9932183fb..77c04b99a 100644
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_regy_tbl.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_regy_tbl.java
@@ -15,9 +15,8 @@ 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 .
*/
-package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.dbs.*; import gplx.xowa.dbs.*;
-import gplx.dbs.engines.sqlite.*;
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*; import gplx.dbs.engines.sqlite.*;
class Xob_lnki_regy_tbl {
public static void Create_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, boolean wiki_ns_for_file_is_case_match_all) {
@@ -27,7 +26,7 @@ class Xob_lnki_regy_tbl {
Sqlite_engine_.Idx_create(usr_dlg, p, "lnki_regy_commons", Idx_ttl_commons);
}
public static final String Tbl_name = "lnki_regy"
- , Fld_lnki_id = "lnki_id", Fld_lnki_page_id = "lnki_page_id"
+ , Fld_lnki_id = "lnki_id", Fld_lnki_tier_id = "lnki_tier_id", Fld_lnki_page_id = "lnki_page_id", Fld_lnki_page_ns = "lnki_page_ns"
, Fld_lnki_ttl = "lnki_ttl", Fld_lnki_commons_ttl = "lnki_commons_ttl"
, Fld_lnki_ext = "lnki_ext", Fld_lnki_type = "lnki_type", Fld_lnki_src_tid = "lnki_src_tid"
, Fld_lnki_w = "lnki_w", Fld_lnki_h = "lnki_h", Fld_lnki_upright = "lnki_upright", Fld_lnki_time = "lnki_time", Fld_lnki_page = "lnki_page"
@@ -36,6 +35,7 @@ class Xob_lnki_regy_tbl {
private static final String Tbl_sql = String_.Concat_lines_nl
( "CREATE TABLE IF NOT EXISTS lnki_regy"
, "( lnki_id integer NOT NULL PRIMARY KEY"
+ , ", lnki_tier_id integer NOT NULL"
, ", lnki_page_id integer NOT NULL"
, ", lnki_ttl varchar(255) NOT NULL"
, ", lnki_commons_ttl varchar(255) NULL"
@@ -52,8 +52,9 @@ class Xob_lnki_regy_tbl {
, ");"
);
public static final String Sql_create_data = String_.Concat_lines_nl
- ( "INSERT INTO lnki_regy (lnki_id, lnki_page_id, lnki_ttl, lnki_commons_ttl, lnki_ext, lnki_type, lnki_src_tid, lnki_w, lnki_h, lnki_upright, lnki_time, lnki_page, lnki_count)"
+ ( "INSERT INTO lnki_regy (lnki_id, lnki_tier_id, lnki_page_id, lnki_ttl, lnki_commons_ttl, lnki_ext, lnki_type, lnki_src_tid, lnki_w, lnki_h, lnki_upright, lnki_time, lnki_page, lnki_count)"
, "SELECT Min(lnki_id)"
+ , ", Min(lnki_tier_id)"
, ", Min(lnki_page_id)"
, ", lnki_ttl"
, ", lnki_commons_ttl"
@@ -83,6 +84,7 @@ class Xob_lnki_regy_tbl {
, Sql_cs_mark_changed = String_.Concat_lines_nl
( "REPLACE INTO lnki_regy"
, "SELECT l.lnki_id"
+ , ", l.lnki_tier_id"
, ", l.lnki_page_id"
, ", l.lnki_ttl"
, ", l.lnki_commons_ttl"
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_src_tid.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_src_tid.java
similarity index 86%
rename from 400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_src_tid.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_src_tid.java
index faf7fa5fb..d5c5348fe 100644
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_src_tid.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_src_tid.java
@@ -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 .
*/
-package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
public class Xob_lnki_src_tid {
public static final byte Tid_file = 0, Tid_media = 1, Tid_gallery = 2, Tid_imageMap = 3;
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_temp_tbl.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_temp_tbl.java
new file mode 100644
index 000000000..ed3e2c039
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_temp_tbl.java
@@ -0,0 +1,62 @@
+/*
+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 .
+*/
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*; import gplx.xowa.files.*;
+class Xob_lnki_temp_tbl {
+ private static final Db_meta_fld_list flds = Db_meta_fld_list.new_();
+ private static final String Tbl_name = "lnki_temp";
+ public static final String
+ Fld_lnki_id = flds.Add_int_pkey_autonum("lnki_id"); // NOTE: insertion order index; public b/c not used and want to bypass warning
+ private static final String
+ Fld_lnki_tier_id = flds.Add_int("lnki_tier_id")
+ , Fld_lnki_page_id = flds.Add_int("lnki_page_id")
+ , Fld_lnki_ttl = flds.Add_str("lnki_ttl", 255)
+ , Fld_lnki_commons_ttl = flds.Add_str_null("lnki_commons_ttl", 255)
+ , Fld_lnki_ext = flds.Add_int("lnki_ext")
+ , Fld_lnki_type = flds.Add_int("lnki_type")
+ , Fld_lnki_src_tid = flds.Add_int("lnki_src_tid")
+ , Fld_lnki_w = flds.Add_int("lnki_w")
+ , Fld_lnki_h = flds.Add_int("lnki_h")
+ , Fld_lnki_upright = flds.Add_double("lnki_upright")
+ , Fld_lnki_time = flds.Add_double("lnki_time") // NOTE: thumbtime is float; using double b/c upright is double and would like to keep datatypes same; https://bugzilla.wikimedia.org/show_bug.cgi?id=39014
+ , Fld_lnki_page = flds.Add_int("lnki_page")
+ ;
+ private Db_stmt stmt_insert;
+ public Xob_lnki_temp_tbl(Db_conn conn) {this.conn = conn;}
+ public Db_conn Conn() {return conn;} private final Db_conn conn;
+ public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(Tbl_name, flds));}
+ public void Insert_bgn() {conn.Txn_bgn(); stmt_insert = conn.Stmt_insert(Tbl_name, flds);}
+ public void Insert_commit() {conn.Txn_sav();}
+ public void Insert_end() {conn.Txn_end(); stmt_insert = Db_stmt_.Rls(stmt_insert);}
+ public void Insert_cmd_by_batch(int tier_id, int page_id, byte[] ttl, byte[] ttl_commons, byte ext_id, byte img_type, byte lnki_src_tid, int w, int h, double upright, double time, int page) {
+ stmt_insert.Clear()
+ .Val_int (Fld_lnki_tier_id , tier_id)
+ .Val_int (Fld_lnki_page_id , page_id)
+ .Val_bry_as_str (Fld_lnki_ttl , ttl)
+ .Val_bry_as_str (Fld_lnki_commons_ttl , ttl_commons)
+ .Val_byte (Fld_lnki_ext , ext_id)
+ .Val_byte (Fld_lnki_type , img_type)
+ .Val_int (Fld_lnki_src_tid , lnki_src_tid)
+ .Val_int (Fld_lnki_w , w)
+ .Val_int (Fld_lnki_h , h)
+ .Val_double (Fld_lnki_upright , upright)
+ .Val_double (Fld_lnki_time , Xof_lnki_time.Db_save_double(time))
+ .Val_int (Fld_lnki_page , page)
+ .Exec_insert();
+ }
+}
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_wkr.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_temp_wkr.java
similarity index 69%
rename from 400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_wkr.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_temp_wkr.java
index 32fcfa763..f5e77a4f7 100644
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_wkr.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_temp_wkr.java
@@ -15,41 +15,37 @@ 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 .
*/
-package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.pages.*;
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.pages.*;
+import gplx.xowa.files.*;
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.html.hdumps.bldrs.*;
-import gplx.xowa.xtns.scribunto.*; import gplx.xowa.xtns.wdatas.*;
-import gplx.xowa.files.fsdb.*; import gplx.fsdb.meta.*;
+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.fsdb.meta.*; import gplx.xowa.files.fsdb.*; import gplx.fsdb.*;
public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xopg_redlink_logger {
- private Db_conn conn; private Db_stmt stmt;
- private boolean wdata_enabled = true, xtn_ref_enabled = true, gen_html, gen_hdump;
- private Xop_log_invoke_wkr invoke_wkr; private Xop_log_property_wkr property_wkr;
- private int[] ns_ids = Int_.Ary(Xow_ns_.Id_main);// , Xow_ns_.Id_category, Xow_ns_.Id_template
- private boolean wiki_ns_file_is_case_match_all = true; private Xowe_wiki commons_wiki;
- private Xob_hdump_bldr hdump_bldr; private long hdump_max = Io_mgr.Len_gb;
- private Xob_link_dump_cmd link_dump_cmd;
+ private Xob_lnki_temp_tbl tbl; private boolean wdata_enabled = true, xtn_ref_enabled = true, gen_html, gen_hdump;
+ private Xop_log_invoke_wkr invoke_wkr; private Xop_log_property_wkr property_wkr;
+ private boolean ns_file_is_case_match_all = true; private Xowe_wiki commons_wiki;
+ private Xob_hdump_bldr hdump_bldr; private Xob_link_dump_cmd link_dump_cmd;
public Xob_lnki_temp_wkr(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
- @Override public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.lnki_temp";
- @Override public byte Init_redirect() {return Bool_.N_byte;}
- @Override public int[] Init_ns_ary() {return ns_ids;}
- @Override protected void Init_reset(Db_conn p) {
- p.Exec_sql("DELETE FROM " + Xodb_xowa_cfg_tbl.Tbl_name);
- p.Exec_sql("DELETE FROM " + Xob_lnki_temp_tbl.Tbl_name);
+ @Override public String Cmd_key() {return Xob_cmd_keys.Key_file_lnki_temp;}
+ @Override public byte Init_redirect() {return Bool_.N_byte;} // lnki_temp does not look at redirect pages
+ @Override public int[] Init_ns_ary() {return ns_ids;} private int[] ns_ids = Int_.Ary(Xow_ns_.Id_main);
+ @Override protected void Init_reset(Db_conn conn) {
+ Db_cfg_tbl cfg_tbl = new Db_cfg_tbl(conn, "xowa_cfg");
+ cfg_tbl.Delete_all();
invoke_wkr.Init_reset();
property_wkr.Init_reset();
}
@Override protected Db_conn Init_db_file() {
ctx.Lnki().File_wkr_(this);
- Xodb_db_file make_db_file = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir());
- conn = make_db_file.Conn();
- Xob_lnki_temp_tbl.Create_table(conn);
- stmt = Xob_lnki_temp_tbl.Insert_stmt(conn);
+ Xob_db_file make_db_file = Xob_db_file.new__file_make(wiki.Fsys_mgr().Root_dir());
+ Db_conn conn = make_db_file.Conn();
+ this.tbl = new Xob_lnki_temp_tbl(conn);
+ tbl.Create_tbl();
return conn;
}
@Override protected void Cmd_bgn_end() {
- wiki_ns_file_is_case_match_all = Wiki_ns_for_file_is_case_match_all(wiki); // NOTE: must call after wiki.init
+ ns_file_is_case_match_all = Ns_file_is_case_match_all(wiki); // NOTE: must call after wiki.init
wiki.Html_mgr().Page_wtr_mgr().Wkr(Xopg_view_mode.Tid_read).Ctgs_enabled_(false); // disable categories else progress messages written (also for PERF)
commons_wiki = app.Wiki_mgr().Get_by_key_or_make(Xow_domain_.Domain_bry_commons);
Xop_log_mgr log_mgr = ctx.App().Log_mgr();
@@ -69,24 +65,27 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xopg_redlink
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);
- Fsm_mnt_mgr.Patch(trg_mnt_mgr); // NOTE: see fsdb_make; DATE:2014-04-26
+ Fsdb_db_mgr__v2 fsdb_core = Fsdb_db_mgr__v2_bldr.I.Make(wiki);
+ trg_mnt_mgr = new Fsm_mnt_mgr(); trg_mnt_mgr.Ctor_by_load(fsdb_core);
+ trg_mnt_mgr.Mnts__get_insert_idx_(Fsm_mnt_mgr.Mnt_idx_main);
+ Fsm_mnt_mgr.Patch(trg_mnt_mgr.Mnts__get_main().Cfg_mgr().Tbl()); // NOTE: see fsdb_make; DATE:2014-04-26
if (gen_hdump) {
- hdump_bldr = new Xob_hdump_bldr(wiki.Db_mgr_as_sql(), conn, hdump_max);
- hdump_bldr.Bld_init();
+ gplx.xowa.apis.xowa.bldrs.imports.Xoapi_import import_cfg = wiki.Appe().Api_root().Bldr().Wiki().Import();
+ hdump_bldr = new Xob_hdump_bldr(wiki.Ns_mgr(), wiki.Db_mgr_as_sql(), tbl.Conn(), import_cfg.Html_db_max());
link_dump_cmd = new Xob_link_dump_cmd();
link_dump_cmd.Init_by_wiki(wiki);
}
- conn.Txn_mgr().Txn_bgn_if_none();
+ tbl.Insert_bgn();
log_mgr.Txn_bgn();
}
- @Override public void Exec_pg_itm_hook(Xow_ns ns, Xodb_page db_page, byte[] page_src) {
+ @Override public void Exec_pg_itm_hook(int ns_ord, Xow_ns ns, Xowd_page_itm db_page, byte[] page_src) {
Xoa_ttl ttl = Xoa_ttl.parse_(wiki, ns.Gen_ttl(db_page.Ttl_page_db()));
byte[] ttl_bry = ttl.Page_db();
byte page_tid = Xow_page_tid.Identify(wiki.Domain_tid(), ns.Id(), ttl_bry);
if (page_tid != Xow_page_tid.Tid_wikitext) return; // ignore js, css, lua, json
Xoae_page page = ctx.Cur_page();
page.Clear();
+ page.Bldr__ns_ord_(ns_ord);
page.Ttl_(ttl).Revision_data().Id_(db_page.Id());
page.Redlink_lnki_list().Clear();
if (ns.Id_tmpl())
@@ -102,7 +101,7 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xopg_redlink
page.Root_(root);
hdump_bldr.Insert_page(page);
link_dump_cmd.Page_bgn(page.Revision_data().Id());
- ListAdp lnki_list = page.Lnki_list();
+ ListAdp lnki_list = page.Redlink_lnki_list().Lnki_list();
int len = lnki_list.Count();
for (int i = 0; i < len; ++i) {
Xop_lnki_tkn lnki = (Xop_lnki_tkn)lnki_list.FetchAt(i);
@@ -114,7 +113,7 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xopg_redlink
}
}
@Override public void Exec_commit_hook() {
- conn.Txn_mgr().Txn_end_all_bgn_if_none(); // save lnki_temp
+ tbl.Conn().Txn_sav();
if (gen_hdump) {
hdump_bldr.Commit();
link_dump_cmd.Wkr_commit();
@@ -125,23 +124,23 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xopg_redlink
hdump_bldr.Bld_term();
link_dump_cmd.Wkr_end();
}
- Gfo_usr_dlg_._.Warn_many("", "", invoke_wkr.Err_filter_mgr().Print());
+ Gfo_usr_dlg_.I.Warn_many("", "", invoke_wkr.Err_filter_mgr().Print());
wiki.Appe().Log_mgr().Txn_end();
- conn.Txn_mgr().Txn_end();
+ tbl.Insert_end();
}
public void Wkr_exec(Xop_ctx ctx, byte[] src, Xop_lnki_tkn lnki, byte lnki_src_tid) {
if (lnki.Ttl().ForceLiteralLink()) return; // ignore literal links which creat a link to file, but do not show the image; EX: [[:File:A.png|thumb|120px]] creates a link to File:A.png, regardless of other display-oriented args
byte[] ttl = lnki.Ttl().Page_db();
Xof_ext ext = Xof_ext_.new_by_ttl_(ttl);
- double lnki_thumbtime = lnki.Time();
+ double lnki_time = lnki.Time();
int lnki_page = lnki.Page();
- byte[] ttl_commons = Xto_commons(wiki_ns_file_is_case_match_all, commons_wiki, ttl);
- if ( Xof_lnki_page.Null_n(lnki_page) // page set
- && Xof_lnki_time.Null_n(lnki_thumbtime)) // thumbtime set
+ byte[] ttl_commons = Xto_commons(ns_file_is_case_match_all, commons_wiki, ttl);
+ if ( Xof_lnki_page.Null_n(lnki_page) // page set
+ && Xof_lnki_time.Null_n(lnki_time)) // thumbtime set
usr_dlg.Warn_many("", "", "page and thumbtime both set; this may be an issue with fsdb: page=~{0} ttl=~{1}", ctx.Cur_page().Ttl().Page_db_as_str(), String_.new_utf8_(ttl));
if (lnki.Ns_id() == Xow_ns_.Id_media)
lnki_src_tid = Xob_lnki_src_tid.Tid_media;
- Xob_lnki_temp_tbl.Insert(stmt, ctx.Cur_page().Revision_data().Id(), ttl, ttl_commons, Byte_.By_int(ext.Id()), lnki.Lnki_type(), lnki_src_tid, lnki.W(), lnki.H(), lnki.Upright(), lnki_thumbtime, lnki_page);
+ tbl.Insert_cmd_by_batch(ctx.Cur_page().Bldr__ns_ord(), ctx.Cur_page().Revision_data().Id(), ttl, ttl_commons, Byte_.By_int(ext.Id()), lnki.Lnki_type(), lnki_src_tid, lnki.W(), lnki.H(), lnki.Upright(), lnki_time, lnki_page);
}
@Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_wdata_enabled_)) wdata_enabled = m.ReadYn("v");
@@ -168,15 +167,13 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xopg_redlink
if (property_wkr == null) property_wkr = bldr.App().Wiki_mgr().Wdata_mgr().Property_wkr_or_new();
return property_wkr;
}
- public static byte[] Xto_commons(boolean wiki_ns_file_is_case_match_all, Xowe_wiki commons_wiki, byte[] ttl_bry) {
- if (!wiki_ns_file_is_case_match_all) return null; // return "" if wiki matches common
+ public static byte[] Xto_commons(boolean ns_file_is_case_match_all, Xowe_wiki commons_wiki, byte[] ttl_bry) {
+ if (!ns_file_is_case_match_all) return null; // return "" if wiki matches common
Xoa_ttl ttl = Xoa_ttl.parse_(commons_wiki, Xow_ns_.Id_file, ttl_bry);
byte[] rv = ttl.Page_db();
return Bry_.Eq(rv, ttl_bry) ? null : rv;
}
- public static boolean Wiki_ns_for_file_is_case_match_all(Xowe_wiki wiki) {
- return wiki.Ns_mgr().Ns_file().Case_match() == Xow_ns_case_.Id_all;
- }
+ public static boolean Ns_file_is_case_match_all(Xow_wiki wiki) {return wiki.Ns_mgr().Ns_file().Case_match() == Xow_ns_case_.Id_all;}
}
class Xob_lnki_temp_wkr_ {
public static int[] Ns_ids_by_aliases(Xowe_wiki wiki, String[] aliases) {
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_wkr_tst.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_temp_wkr_tst.java
similarity index 91%
rename from 400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_wkr_tst.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_temp_wkr_tst.java
index 84ee81769..bcf85cf5b 100644
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_wkr_tst.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_temp_wkr_tst.java
@@ -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 .
*/
-package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
import org.junit.*;
public class Xob_lnki_temp_wkr_tst {
private Xob_lnki_temp_wkr_fxt fxt = new Xob_lnki_temp_wkr_fxt();
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_regy_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_orig_regy_cmd.java
similarity index 72%
rename from 400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_regy_cmd.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_orig_regy_cmd.java
index 872669ec6..54e08ab2a 100644
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_regy_cmd.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_orig_regy_cmd.java
@@ -15,15 +15,15 @@ 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 .
*/
-package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.dbs.*; import gplx.xowa.wikis.*; import gplx.xowa.dbs.*; import gplx.xowa.bldrs.oimgs.*;
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*; import gplx.xowa.wikis.*;
public class Xob_orig_regy_cmd extends Xob_itm_basic_base implements Xob_cmd {
private boolean repo_0_is_remote = false;
public Xob_orig_regy_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
- public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.orig_regy";
- public void Cmd_ini(Xob_bldr bldr) {}
+ public String Cmd_key() {return Xob_cmd_keys.Key_file_orig_regy;}
+ public void Cmd_init(Xob_bldr bldr) {}
public void Cmd_bgn(Xob_bldr bldr) {
- Db_conn conn = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
+ Db_conn conn = Xob_db_file.new__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
Xob_orig_regy_tbl.Create_table(conn);
Xowe_wiki commons_wiki = bldr.App().Wiki_mgr().Get_by_key_or_make(Xow_domain_.Domain_bry_commons).Init_assert();
Xowe_wiki repo_0 = wiki, repo_1 = commons_wiki;
@@ -32,12 +32,12 @@ public class Xob_orig_regy_cmd extends Xob_itm_basic_base implements Xob_cmd {
repo_1 = wiki;
}
repo_0.Init_assert(); repo_1.Init_assert();
- Xodb_db_file file_registry_db = Xodb_db_file.init__page_regy(commons_wiki.Fsys_mgr().Root_dir());
- Xob_orig_regy_tbl.Create_data(bldr.Usr_dlg(), conn, file_registry_db, repo_0_is_remote, repo_0, repo_1, Xob_lnki_temp_wkr.Wiki_ns_for_file_is_case_match_all(wiki));
+ Xob_db_file file_registry_db = Xob_db_file.new__page_regy(commons_wiki.Fsys_mgr().Root_dir());
+ Xob_orig_regy_tbl.Create_data(bldr.Usr_dlg(), conn, file_registry_db, repo_0_is_remote, repo_0, repo_1, Xob_lnki_temp_wkr.Ns_file_is_case_match_all(wiki));
}
public void Cmd_run() {}
public void Cmd_end() {}
- public void Cmd_print() {}
+ public void Cmd_term() {}
@Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_repo_0_is_remote_)) repo_0_is_remote = m.ReadYn("v");
else return super.Invk(ctx, ikey, k, m);
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_regy_tbl.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_orig_regy_tbl.java
similarity index 88%
rename from 400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_regy_tbl.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_orig_regy_tbl.java
index dfbe3e5af..53ea0c7bc 100644
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_regy_tbl.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_orig_regy_tbl.java
@@ -15,12 +15,12 @@ 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 .
*/
-package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.dbs.*; import gplx.xowa.wikis.*; import gplx.xowa.dbs.*; import gplx.xowa.bldrs.oimgs.*; import gplx.xowa.files.repos.*;
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*; import gplx.xowa.wikis.*; import gplx.xowa.files.repos.*;
import gplx.dbs.engines.sqlite.*;
class Xob_orig_regy_tbl {
public static void Create_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, Xodb_db_file file_registry_db, boolean repo_0_is_remote, Xowe_wiki repo_0_wiki, Xowe_wiki repo_1_wiki, boolean wiki_ns_for_file_is_case_match_all) {
+ public static void Create_data(Gfo_usr_dlg usr_dlg, Db_conn p, Xob_db_file file_registry_db, boolean repo_0_is_remote, Xowe_wiki repo_0_wiki, Xowe_wiki repo_1_wiki, boolean wiki_ns_for_file_is_case_match_all) {
usr_dlg.Prog_many("", "", "inserting lnki_regy");
p.Exec_sql(Sql_create_data);
Sqlite_engine_.Idx_create(usr_dlg, p, "orig_regy", Idx_ttl_local);
@@ -38,9 +38,9 @@ class Xob_orig_regy_tbl {
repo_1_tid = Xof_repo_itm.Repo_local;
local_wiki = repo_1_wiki;
}
- Create_data_for_repo(usr_dlg, p, local_wiki, Byte_.By_int(repo_0_tid), repo_0_dir.GenSubFil(Xodb_db_file.Name__wiki_image));
+ Create_data_for_repo(usr_dlg, p, local_wiki, Byte_.By_int(repo_0_tid), repo_0_dir.GenSubFil(Xob_db_file.Name__wiki_image));
if (!local_is_remote) { // only run for repo_1 if local != remote; only affects commons
- Create_data_for_repo(usr_dlg, p, local_wiki, Byte_.By_int(repo_1_tid), repo_1_dir.GenSubFil(Xodb_db_file.Name__wiki_image));
+ Create_data_for_repo(usr_dlg, p, local_wiki, Byte_.By_int(repo_1_tid), repo_1_dir.GenSubFil(Xob_db_file.Name__wiki_image));
if (wiki_ns_for_file_is_case_match_all) {
Io_url repo_remote_dir = repo_0_is_remote ? repo_0_dir : repo_1_dir;
Create_data_for_cs(usr_dlg, p, local_wiki, repo_remote_dir);
@@ -49,21 +49,22 @@ class Xob_orig_regy_tbl {
Sqlite_engine_.Db_detach(p, "page_db");
Sqlite_engine_.Idx_create(usr_dlg, p, "orig_regy", Idx_xfer_temp);
}
- private static void Create_data_for_repo(Gfo_usr_dlg usr_dlg, Db_conn cur, Xowe_wiki local_wiki, byte repo_tid, Io_url join) {
+ private static void Create_data_for_repo(Gfo_usr_dlg usr_dlg, Db_conn conn, Xowe_wiki local_wiki, byte repo_tid, Io_url join) {
usr_dlg.Note_many("", "", "inserting page for xowa.wiki.image: ~{0}", join.OwnerDir().NameOnly());
boolean wiki_has_cs_file = repo_tid == Xof_repo_itm.Repo_remote && local_wiki.Ns_mgr().Ns_file().Case_match() == Xow_ns_case_.Id_all;
String lnki_ttl_fld = wiki_has_cs_file ? "Coalesce(o.lnki_commons_ttl, o.lnki_ttl)" : "o.lnki_ttl"; // NOTE: use lnki_commons_ttl if [[File]] is cs PAGE:en.d:water EX:[[image:wikiquote-logo.png|50px|none|alt=]]; DATE:2014-09-05
if (wiki_has_cs_file)
- Sqlite_engine_.Idx_create(usr_dlg, cur, "orig_regy", Idx_ttl_remote);
- Sqlite_engine_.Db_attach(cur, "image_db", join.Raw());
- cur.Exec_sql(String_.Format(Sql_update_repo_page, repo_tid, lnki_ttl_fld));
- cur.Exec_sql(String_.Format(Sql_update_repo_redirect, repo_tid, lnki_ttl_fld));
- Sqlite_engine_.Db_detach(cur, "image_db");
+ Sqlite_engine_.Idx_create(usr_dlg, conn, "orig_regy", Idx_ttl_remote);
+ Db_attach_cmd.new_(conn, "image_db", join)
+ .Add_fmt("orig_regy:updating page" , Sql_update_repo_page, repo_tid, lnki_ttl_fld)
+ .Add_fmt("orig_regy:updating redirect" , Sql_update_repo_redirect, repo_tid, lnki_ttl_fld)
+ .Exec()
+ ;
}
private static void Create_data_for_cs(Gfo_usr_dlg usr_dlg, Db_conn p, Xowe_wiki local_wiki, Io_url repo_remote_dir) {
p.Exec_sql(Xob_orig_regy_tbl.Sql_cs_mark_dupes); // orig_regy: find dupes; see note in SQL
p.Exec_sql(Xob_orig_regy_tbl.Sql_cs_update_ttls); // orig_regy: update lnki_ttl with lnki_commons_ttl
- Create_data_for_repo(usr_dlg, p, local_wiki, Xof_repo_itm.Repo_remote, repo_remote_dir.GenSubFil(Xodb_db_file.Name__wiki_image));
+ Create_data_for_repo(usr_dlg, p, local_wiki, Xof_repo_itm.Repo_remote, repo_remote_dir.GenSubFil(Xob_db_file.Name__wiki_image));
p.Exec_sql(Xob_lnki_regy_tbl.Sql_cs_mark_changed); // lnki_regy: update lnki_commons_flag
p.Exec_sql(Xob_lnki_regy_tbl.Sql_cs_update_ttls); // lnki_regy: update cs
}
@@ -77,7 +78,7 @@ class Xob_orig_regy_tbl {
private static final Db_idx_itm
Idx_ttl_local = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS orig_regy__ttl_local ON orig_regy (lnki_ttl);")
, Idx_ttl_remote = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS orig_regy__ttl_remote ON orig_regy (lnki_commons_ttl, lnki_ttl);")
- , Idx_xfer_temp = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS orig_regy__xfer_temp ON orig_regy (lnki_ttl, orig_file_ttl, orig_timestamp);")
+ , Idx_xfer_temp = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS orig_regy__xfer_temp ON orig_regy (lnki_ttl, orig_file_ttl, orig_repo, orig_timestamp);")
;
private static final String
Tbl_sql = String_.Concat_lines_nl
@@ -142,7 +143,7 @@ class Xob_orig_regy_tbl {
, ", i.img_minor_mime"
, ", i.img_timestamp"
, "FROM orig_regy o"
- , " JOIN image_db.image i ON {1} = i.img_name"
+ , " JOIN image i ON {1} = i.img_name"
, " JOIN page_db.page_regy m ON m.repo_id = {0} AND m.itm_tid = 0 AND {1} = m.src_ttl"
, "WHERE o.orig_file_ttl IS NULL" // NOTE: only insert if file doesn't exist; changed from timestamp b/c old images may exist in both wikis; EX:ar.n:File:Facebook.png; DATE:2014-08-20
// , "WHERE i.img_timestamp > o.orig_timestamp" // NOTE: this handles an image in local and remote by taking later version; DATE:2014-07-22
@@ -173,7 +174,7 @@ class Xob_orig_regy_tbl {
, ", i.img_timestamp"
, "FROM orig_regy o"
, " JOIN page_db.page_regy m ON m.repo_id = {0} AND m.itm_tid = 1 AND {1} = m.src_ttl"
- , " JOIN image_db.image i ON m.trg_ttl = i.img_name"
+ , " JOIN image i ON m.trg_ttl = i.img_name"
, "WHERE o.orig_file_ttl IS NULL" // NOTE: only insert if file doesn't exist; changed from timestamp b/c old images may exist in both wikis; EX:ar.n:File:Facebook.png; DATE:2014-08-20
// , "WHERE i.img_timestamp > o.orig_timestamp" // NOTE: this handles an image in local and remote by taking later version; DATE:2014-07-22
, "ORDER BY 1" // must order by lnki_id since it is PRIMARY KEY, else sqlite will spend hours shuffling rows in table
diff --git a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_bmk_mgr.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_orig_regy_update_bmk_mgr.java
similarity index 76%
rename from 400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_bmk_mgr.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_orig_regy_update_bmk_mgr.java
index 0541d9eb6..eef6bb186 100644
--- a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_bmk_mgr.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_orig_regy_update_bmk_mgr.java
@@ -15,20 +15,19 @@ 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 .
*/
-package gplx.xowa.bldrs.oimgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.dbs.*; import gplx.xowa.dbs.tbls.*;
-public class Xob_bmk_mgr implements GfoInvkAble {
- private Xodb_xowa_cfg_tbl cfg_tbl; private Db_stmt cfg_stmt;
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.xowa.wikis.data.tbls.*;
+public class Xob_orig_regy_update_bmk_mgr implements GfoInvkAble {
+ private Db_cfg_tbl cfg_tbl;
private String cfg_grp;
public byte Repo_prv() {return repo_prv;} private byte repo_prv;
public int Ns_prv() {return ns_prv;} private int ns_prv;
public byte[] Ttl_prv() {return ttl_prv;} private byte[] ttl_prv;
private boolean repo_enable, ns_enable, ttl_enable;
private boolean repo_dirty, ns_dirty, ttl_dirty;
- public Xob_bmk_mgr Init(Db_conn p, String grp, boolean repo_enable, boolean ns_enable, boolean ttl_enable) {
+ public Xob_orig_regy_update_bmk_mgr Init(Db_conn p, String grp, boolean repo_enable, boolean ns_enable, boolean ttl_enable) {
this.cfg_grp = grp;
- cfg_tbl = new Xodb_xowa_cfg_tbl().Conn_(p);
- cfg_stmt = cfg_tbl.Update_stmt();
+ cfg_tbl = new Db_cfg_tbl(p, "xowa_cfg");
this.repo_enable = repo_enable;
this.ns_enable = ns_enable;
this.ttl_enable = ttl_enable;
@@ -36,7 +35,7 @@ public class Xob_bmk_mgr implements GfoInvkAble {
}
public void Term() {
this.Save(); // flush existing values
- cfg_stmt.Rls();
+ cfg_tbl.Rls();
}
public void Update_repo_ttl(byte repo, byte[] ttl) {Update(repo, Null_ns, ttl);}
public void Update(byte repo, int ns, byte[] ttl) {
@@ -59,13 +58,13 @@ public class Xob_bmk_mgr implements GfoInvkAble {
}
}
}
- public Xob_bmk_mgr Load() {
+ public Xob_orig_regy_update_bmk_mgr Load() {
if (repo_enable)
- repo_prv = Byte_.parse_(cfg_tbl.Select_val_or_make(cfg_grp, Cfg_repo_prv, "0"));
+ repo_prv = cfg_tbl.Assert_byte(cfg_grp, Cfg_repo_prv, Byte_.Zero);
if (ns_enable)
- ns_prv = Int_.parse_(cfg_tbl.Select_val_or_make(cfg_grp, Cfg_ns_prv, "0"));
+ ns_prv = cfg_tbl.Assert_int(cfg_grp, Cfg_ns_prv, 0);
if (ttl_enable)
- ttl_prv = Bry_.new_utf8_(cfg_tbl.Select_val_or_make(cfg_grp, Cfg_ttl_prv, ""));
+ ttl_prv = cfg_tbl.Assert_bry(cfg_grp, Cfg_ttl_prv, Bry_.Empty);
repo_dirty = ns_dirty = ttl_dirty = false;
return this;
}
@@ -84,7 +83,7 @@ public class Xob_bmk_mgr implements GfoInvkAble {
}
}
private void Save(String cfg_key, String cfg_val) {
- cfg_tbl.Update(cfg_stmt, cfg_grp, cfg_key, cfg_val);
+ cfg_tbl.Update_str(cfg_grp, cfg_key, cfg_val);
}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_repo_prv_)) repo_prv = m.ReadByte("v");
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_qry_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_orig_regy_update_cmd.java
similarity index 71%
rename from 400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_qry_cmd.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_orig_regy_update_cmd.java
index 8d003a14e..a3f1c278a 100644
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_qry_cmd.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_orig_regy_update_cmd.java
@@ -15,17 +15,16 @@ 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 .
*/
-package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.dbs.*; import gplx.xowa.files.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.files.origs.*;
-import gplx.xowa.bldrs.oimgs.*;
-public class Xob_orig_qry_cmd extends Xob_itm_basic_base implements Xob_cmd {
- public Xob_orig_qry_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.dbs.*; import gplx.xowa.files.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.files.origs.*;
+public class Xob_orig_regy_update_cmd extends Xob_itm_basic_base implements Xob_cmd { // downloads latest orig data
+ public Xob_orig_regy_update_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "oimg.orig_qry";
- public void Cmd_ini(Xob_bldr bldr) {}
+ public void Cmd_init(Xob_bldr bldr) {}
public void Cmd_bgn(Xob_bldr bldr) {
// Xof_orig_mgr qry_mgr = new Xof_orig_mgr();
- Db_conn conn = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
- Xob_bmk_mgr bmk = new Xob_bmk_mgr();
+ Db_conn conn = Xob_db_file.new__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
+ Xob_orig_regy_update_bmk_mgr bmk = new Xob_orig_regy_update_bmk_mgr();
bmk.Init(conn, this.Cmd_key(), true, false, true);
bmk.Load();
// Xof_fsdb_itm itm = new Xof_fsdb_itm();
@@ -61,5 +60,5 @@ public class Xob_orig_qry_cmd extends Xob_itm_basic_base implements Xob_cmd {
}
public void Cmd_run() {}
public void Cmd_end() {}
- public void Cmd_print() {}
+ public void Cmd_term() {}
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_page_regy_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_page_regy_cmd.java
similarity index 80%
rename from 400_xowa/src/gplx/xowa/bldrs/files/Xob_page_regy_cmd.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_page_regy_cmd.java
index 6452228da..8050658d2 100644
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_page_regy_cmd.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_page_regy_cmd.java
@@ -15,16 +15,16 @@ 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 .
*/
-package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.dbs.*; import gplx.xowa.wikis.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.bldrs.oimgs.*; import gplx.xowa.files.repos.*;
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*; import gplx.xowa.wikis.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.files.repos.*;
public class Xob_page_regy_cmd extends Xob_itm_basic_base implements Xob_cmd {
public Xob_page_regy_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
private boolean build_commons = false;
- public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.page_regy";
- public void Cmd_ini(Xob_bldr bldr) {}
+ public String Cmd_key() {return Xob_cmd_keys.Key_file_page_regy;}
+ public void Cmd_init(Xob_bldr bldr) {}
public void Cmd_bgn(Xob_bldr bldr) {
Xowe_wiki commons_wiki = bldr.App().Wiki_mgr().Get_by_key_or_make(Xow_domain_.Domain_bry_commons).Init_assert();
- Db_conn page_regy_provider = Xodb_db_file.init__page_regy(commons_wiki.Fsys_mgr().Root_dir()).Conn();
+ Db_conn page_regy_provider = Xob_db_file.new__page_regy(commons_wiki.Fsys_mgr().Root_dir()).Conn();
commons_wiki.Init_assert();
if (build_commons) {
Xob_page_regy_tbl.Reset_table(page_regy_provider);
@@ -41,7 +41,7 @@ public class Xob_page_regy_cmd extends Xob_itm_basic_base implements Xob_cmd {
}
public void Cmd_run() {}
public void Cmd_end() {}
- public void Cmd_print() {}
+ public void Cmd_term() {}
@Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_build_commons_)) build_commons = m.ReadYn("v");
else return GfoInvkAble_.Rv_unhandled;
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_page_regy_tbl.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_page_regy_tbl.java
similarity index 84%
rename from 400_xowa/src/gplx/xowa/bldrs/files/Xob_page_regy_tbl.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_page_regy_tbl.java
index 40dd229ef..a6a1a975e 100644
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_page_regy_tbl.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_page_regy_tbl.java
@@ -15,15 +15,14 @@ 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 .
*/
-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.*;
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*; import gplx.xowa.wikis.data.*; import gplx.xowa.files.repos.*; import gplx.dbs.engines.sqlite.*;
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().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));
+ Xowd_db_file db_core = wiki.Db_mgr_as_sql().Core_data_mgr().Db__core();
+ Create_data__insert_page(usr_dlg, p, repo_tid, db_core.Url());
+ Create_data__insert_redirect(usr_dlg, p, repo_tid, wiki.Fsys_mgr().Root_dir().GenSubFil(Xob_db_file.Name__wiki_redirect));
}
public static void Delete_local(Db_conn p) {
p.Exec_sql("DELETE FROM page_regy WHERE repo_id = " + Xof_repo_itm.Repo_local);
@@ -35,6 +34,7 @@ class Xob_page_regy_tbl {
Sqlite_engine_.Db_detach(cur, "page_db");
}
private static void Create_data__insert_redirect(Gfo_usr_dlg usr_dlg, Db_conn cur, byte repo_tid, Io_url join) {
+ if (!Io_mgr._.ExistsFil(join)) return; // redirect_db will not exist when commons.wikimedia.org is set up on new machine
usr_dlg.Note_many("", "", "inserting redirect: ~{0}", join.OwnerDir().NameOnly());
Sqlite_engine_.Db_attach(cur, "redirect_db", join.Raw());
cur.Exec_sql(String_.Format(Sql_create_redirect, repo_tid));
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_regy_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_regy_cmd.java
similarity index 70%
rename from 400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_regy_cmd.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_regy_cmd.java
index 8591c0a67..9bfade654 100644
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_regy_cmd.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_regy_cmd.java
@@ -15,21 +15,22 @@ 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 .
*/
-package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.files.*; import gplx.xowa.bldrs.oimgs.*;
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*;
public class Xob_xfer_regy_cmd extends Xob_itm_basic_base implements Xob_cmd {
public Xob_xfer_regy_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
- public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.xfer_regy";
- public void Cmd_ini(Xob_bldr bldr) {}
+ public String Cmd_key() {return Xob_cmd_keys.Key_file_xfer_regy;}
+ public void Cmd_init(Xob_bldr bldr) {}
public void Cmd_bgn(Xob_bldr bldr) {}
public void Cmd_run() {
- Db_conn conn = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
+ Db_conn conn = Xob_db_file.new__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
+ conn.Txn_bgn();
Xob_xfer_regy_tbl.Create_table(conn);
Xob_xfer_regy_tbl.Create_data(usr_dlg, conn);
Xob_xfer_regy_tbl.Create_index(usr_dlg, conn);
Xob_xfer_regy_log_tbl.Create_table(conn);
- conn.Txn_mgr().Txn_end_all();
+ conn.Txn_end();
}
public void Cmd_end() {}
- public void Cmd_print() {}
+ public void Cmd_term() {}
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_regy_tbl.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_regy_tbl.java
similarity index 79%
rename from 400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_regy_tbl.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_regy_tbl.java
index d36f8b54e..b06896abb 100644
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_regy_tbl.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_regy_tbl.java
@@ -15,15 +15,23 @@ 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 .
*/
-package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.bldrs.oimgs.*;
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.dbs.engines.sqlite.*;
public class Xob_xfer_regy_tbl {
+ public static final String Tbl_name = "xfer_regy"
+ , Fld_lnki_id = "lnki_id", Fld_lnki_tier_id = "lnki_tier_id", Fld_lnki_page_id = "lnki_page_id", Fld_lnki_ttl = "lnki_ttl", Fld_lnki_ext = "lnki_ext"
+ , Fld_lnki_time = "lnki_time", Fld_lnki_page = "lnki_page", Fld_lnki_count = "lnki_count"
+ , Fld_orig_repo = "orig_repo", Fld_orig_page_id = "orig_page_id", Fld_orig_redirect_src = "orig_redirect_src", Fld_orig_media_type = "orig_media_type"
+ , Fld_orig_w = "orig_w", Fld_orig_h = "orig_h"
+ , Fld_file_w = "file_w", Fld_file_h = "file_h", Fld_file_is_orig = "file_is_orig"
+ , Fld_xfer_status = "xfer_status"
+ ;
public static void Create_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) {
p.Exec_sql(Sql_create_data_orig);
p.Exec_sql(Sql_create_data_thumb);
}
- public static void Create_index(Gfo_usr_dlg usr_dlg, Db_conn p) {Sqlite_engine_.Idx_create(usr_dlg, p, Xodb_db_file.Name__file_make, Idx_lnki_page_id, Idx_lnki_ttl);}
+ public static void Create_index(Gfo_usr_dlg usr_dlg, Db_conn p) {Sqlite_engine_.Idx_create(usr_dlg, p, Xob_db_file.Name__file_make, Idx_lnki_page_id, Idx_lnki_ttl);}
public static DataRdr Select(Db_conn p, byte repo_id, byte[] ttl, int limit) {
Db_qry qry = Db_qry_.select_().Cols_all_()
.From_(Tbl_name)
@@ -41,7 +49,7 @@ public class Xob_xfer_regy_tbl {
, "FROM xfer_regy"
, "WHERE xfer_status = 0"
, "AND lnki_page_id >= ?"
- , "ORDER BY lnki_page_id, lnki_id"
+ , "ORDER BY lnki_tier_id, lnki_page_id, lnki_id"
, "LIMIT ?"
)
, Sql_select_total_pending = String_.Concat_lines_nl
@@ -50,11 +58,11 @@ public class Xob_xfer_regy_tbl {
, "WHERE xfer_status = 0"
)
;
- public static DataRdr Select_by_lnki_page_id(Db_conn p, int lnki_page_id, int select_interval) {
+ public static DataRdr Select_by_tier_page(Db_conn p, int tier_id, int page_id, int select_interval) {
Db_qry qry = Db_qry_.select_().Cols_all_()
.From_(Tbl_name)
- .Where_(gplx.core.criterias.Criteria_.And_many(Db_crt_.eq_(Fld_xfer_status, 0), Db_crt_.mte_(Fld_lnki_page_id, lnki_page_id)))
- .OrderBy_many_(Fld_lnki_page_id, Fld_lnki_id)
+ .Where_(gplx.core.criterias.Criteria_.And_many(Db_crt_.eq_(Fld_xfer_status, 0), Db_crt_.eq_(Fld_lnki_tier_id, tier_id), Db_crt_.mte_(Fld_lnki_page_id, page_id)))
+ .OrderBy_many_(Fld_lnki_tier_id, Fld_lnki_page_id, Fld_lnki_id)
.Limit_(select_interval)
;
return p.Exec_qry_as_rdr(qry);
@@ -67,17 +75,10 @@ public class Xob_xfer_regy_tbl {
rdr.Rls();
return rv;
}
- public static final String Tbl_name = "xfer_regy"
- , Fld_lnki_id = "lnki_id", Fld_lnki_page_id = "lnki_page_id", Fld_lnki_ttl = "lnki_ttl", Fld_lnki_ext = "lnki_ext"
- , Fld_lnki_time = "lnki_time", Fld_lnki_page = "lnki_page", Fld_lnki_count = "lnki_count"
- , Fld_orig_repo = "orig_repo", Fld_orig_page_id = "orig_page_id", Fld_orig_redirect_src = "orig_redirect_src", Fld_orig_media_type = "orig_media_type"
- , Fld_orig_w = "orig_w", Fld_orig_h = "orig_h"
- , Fld_file_w = "file_w", Fld_file_h = "file_h", Fld_file_is_orig = "file_is_orig"
- , Fld_xfer_status = "xfer_status"
- ;
private static final String Tbl_sql = String_.Concat_lines_nl
( "CREATE TABLE IF NOT EXISTS xfer_regy"
, "( lnki_id integer NOT NULL PRIMARY KEY"
+ , ", lnki_tier_id integer NOT NULL"
, ", lnki_page_id integer NOT NULL"
, ", lnki_ttl varchar(255) NOT NULL"
, ", lnki_ext integer NOT NULL"
@@ -98,12 +99,12 @@ public class Xob_xfer_regy_tbl {
);
private static final String Sql_create_data_orig = String_.Concat_lines_nl
( "INSERT INTO xfer_regy "
- , "( lnki_id, lnki_page_id, orig_page_id, orig_repo, lnki_ttl, orig_redirect_src, lnki_ext, orig_media_type"
+ , "( lnki_id, lnki_tier_id, lnki_page_id, orig_page_id, orig_repo, lnki_ttl, orig_redirect_src, lnki_ext, orig_media_type"
, ", file_is_orig, orig_w, orig_h, file_w, file_h, lnki_time, lnki_page, lnki_count"
, ", xfer_status"
, ")"
, "SELECT "
- , " Min(lnki_id), Min(lnki_page_id), Min(orig_page_id), orig_repo, lnki_ttl, Max(orig_redirect_src), lnki_ext, orig_media_type" // NOTE: Max(orig_redirect_src) not Min (else would get '')
+ , " Min(lnki_id), Min(lnki_tier_id), Min(lnki_page_id), Min(orig_page_id), orig_repo, lnki_ttl, Max(orig_redirect_src), lnki_ext, orig_media_type" // NOTE: Max(orig_redirect_src) not Min (else would get '')
, ", file_is_orig, orig_w, orig_h, -1, -1, lnki_time, lnki_page, Sum(lnki_count)"
, ", 0"
, "FROM xfer_temp x"
@@ -112,12 +113,12 @@ public class Xob_xfer_regy_tbl {
);
private static final String Sql_create_data_thumb = String_.Concat_lines_nl
( "INSERT INTO xfer_regy "
- , "( lnki_id, lnki_page_id, orig_page_id, orig_repo, lnki_ttl, orig_redirect_src, lnki_ext, orig_media_type"
+ , "( lnki_id, lnki_tier_id, lnki_page_id, orig_page_id, orig_repo, lnki_ttl, orig_redirect_src, lnki_ext, orig_media_type"
, ", file_is_orig, orig_w, orig_h, file_w, file_h, lnki_time, lnki_page, lnki_count"
, ", xfer_status"
, ")"
, "SELECT "
- , " Min(lnki_id), Min(lnki_page_id), Min(orig_page_id), orig_repo, lnki_ttl, Max(orig_redirect_src), lnki_ext, orig_media_type"
+ , " Min(lnki_id), Min(lnki_tier_id), Min(lnki_page_id), Min(orig_page_id), orig_repo, lnki_ttl, Max(orig_redirect_src), lnki_ext, orig_media_type"
, ", file_is_orig, orig_w, orig_h, file_w, file_h, lnki_time, lnki_page, Sum(lnki_count)"
, ", 0"
, "FROM xfer_temp x"
@@ -126,7 +127,7 @@ public class Xob_xfer_regy_tbl {
);
private static final Db_idx_itm
// Idx_select = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS xfer_regy__select ON xfer_regy (xfer_status, orig_repo, lnki_ttl, file_w);")
- Idx_lnki_page_id = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS xfer_regy__lnki_page_id ON xfer_regy (xfer_status, lnki_page_id, lnki_id, orig_repo, file_is_orig, lnki_ttl, lnki_ext, lnki_time, lnki_page, file_w, file_h);")
+ Idx_lnki_page_id = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS xfer_regy__lnki_page_id ON xfer_regy (xfer_status, lnki_tier_id, lnki_page_id, lnki_id, orig_repo, file_is_orig, lnki_ttl, lnki_ext, lnki_time, lnki_page, file_w, file_h);")
, Idx_lnki_ttl = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS xfer_regy__lnki_ttl ON xfer_regy (lnki_ttl);") // needed for troubleshooting
;
public static byte Status_todo = 0, Status_pass = 1, Status_fail = 2, Status_ignore_processed = 3;
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_regy_update_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_regy_update_cmd.java
similarity index 86%
rename from 400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_regy_update_cmd.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_regy_update_cmd.java
index d538e15a6..356303f56 100644
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_regy_update_cmd.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_regy_update_cmd.java
@@ -15,44 +15,44 @@ 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 .
*/
-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.bldrs.oimgs.*;
-import gplx.fsdb.*; import gplx.fsdb.meta.*;
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.fsdb.meta.*;
public class Xob_xfer_regy_update_cmd extends Xob_itm_basic_base implements Xob_cmd {
public Xob_xfer_regy_update_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
- public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.xfer_regy_update";
- public void Cmd_ini(Xob_bldr bldr) {}
+ public String Cmd_key() {return Xob_cmd_keys.Key_file_xfer_regy_update;}
+ public void Cmd_init(Xob_bldr bldr) {}
public void Cmd_bgn(Xob_bldr bldr) {}
public void Cmd_run() {Exec_main();}
public void Cmd_end() {}
- public void Cmd_print() {}
+ public void Cmd_term() {}
private void Exec_main() {
- Db_conn make_db_provider = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
+ Db_conn make_db_provider = Xob_db_file.new__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
this.Copy_atrs_to_make_db(make_db_provider);
this.Update_status(make_db_provider);
}
private void Copy_atrs_to_make_db(Db_conn make_db_provider) {
- wiki.File_mgr().Fsdb_mgr().Init_by_wiki(wiki);
- Fsm_abc_mgr fsdb_abc_mgr = wiki.File_mgr().Fsdb_mgr().Mnt_mgr().Mnts__at(0); // 0 = fsdb.main
- Io_url fsdb_atr_url = fsdb_abc_mgr.Atr_mgr().Get_at(0).Url(); // 0 = fsdb.atr.00
+ wiki.File_mgr().Init_file_mgr_by_load(wiki);
+ Fsm_mnt_itm fsdb_abc_mgr = wiki.File_mgr().Fsdb_mgr().Mnt_mgr().Mnts__get_main(); // 0 = fsdb.main
+ Db_conn conn = fsdb_abc_mgr.Atr_mgr().Db__core().Conn(); // 0 = fsdb.atr.00
+ Io_url fsdb_atr_url = ((gplx.dbs.engines.sqlite.Sqlite_conn_info)conn.Conn_info()).Url();
Sqlite_engine_.Tbl_create_and_delete(make_db_provider, Xob_fsdb_regy_tbl.Tbl_name, Xob_fsdb_regy_tbl.Tbl_sql);
Sqlite_engine_.Db_attach(make_db_provider, "fsdb_db", fsdb_atr_url.Raw());
- make_db_provider.Txn_mgr().Txn_bgn();
+ make_db_provider.Txn_bgn();
make_db_provider.Exec_sql(Xob_fsdb_regy_tbl.Insert_fsdb_fil);
- String insert_sql_fsdb_thm = wiki.File_mgr().Fsdb_mgr().Mnt_mgr().Mnts__at(0).Cfg_mgr().Schema_thm_page() // Cfg_get(Fsm_cfg_mgr.Grp_core).Get_yn_or_n(Fsm_cfg_mgr.Key_schema_thm_page)
+ String insert_sql_fsdb_thm = wiki.File_mgr().Fsdb_mgr().Mnt_mgr().Mnts__get_main().Cfg_mgr().Schema_thm_page() // Cfg_get(Fsm_cfg_mgr.Grp_core).Get_yn_or_n(Fsm_cfg_mgr.Key_schema_thm_page)
? Xob_fsdb_regy_tbl.Insert_fsdb_thm
: Xob_fsdb_regy_tbl.Insert_fsdb_thm_v0
;
make_db_provider.Exec_sql(insert_sql_fsdb_thm);
- make_db_provider.Txn_mgr().Txn_end();
+ make_db_provider.Txn_end();
Sqlite_engine_.Idx_create(make_db_provider, Xob_fsdb_regy_tbl.Idx_main);
Sqlite_engine_.Db_detach(make_db_provider, "fsdb_db");
}
private void Update_status(Db_conn make_db_provider) {
- make_db_provider.Txn_mgr().Txn_bgn();
+ make_db_provider.Txn_bgn();
make_db_provider.Exec_sql(Xob_fsdb_regy_tbl.Update_regy_fil);
make_db_provider.Exec_sql(Xob_fsdb_regy_tbl.Update_regy_thm);
- make_db_provider.Txn_mgr().Txn_end();
+ make_db_provider.Txn_end();
}
@Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
return this;
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_cmd_orig.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_temp_cmd_orig.java
similarity index 83%
rename from 400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_cmd_orig.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_temp_cmd_orig.java
index d9e22f44c..a2b91321a 100644
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_cmd_orig.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_temp_cmd_orig.java
@@ -15,20 +15,18 @@ 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 .
*/
-package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.dbs.*; import gplx.xowa.dbs.*;
-import gplx.xowa.files.*; import gplx.xowa.files.exts.*;
-import gplx.xowa.bldrs.oimgs.*;
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.files.*; import gplx.xowa.files.exts.*;
public class Xob_xfer_temp_cmd_orig extends Xob_itm_basic_base implements Xob_cmd {
private byte[] ext_rules_key = Bry_.Empty;
public Xob_xfer_temp_cmd_orig(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
- public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.xfer_temp.orig";
- public void Cmd_ini(Xob_bldr bldr) {}
+ public String Cmd_key() {return Xob_cmd_keys.Key_file_xfer_temp_orig;}
+ public void Cmd_init(Xob_bldr bldr) {}
public void Cmd_bgn(Xob_bldr bldr) {
- Db_conn conn = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
+ Db_conn conn = Xob_db_file.new__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
Xob_xfer_temp_tbl.Create_table(conn);
Db_stmt trg_stmt = Xob_xfer_temp_tbl.Insert_stmt(conn);
- conn.Txn_mgr().Txn_bgn_if_none();
+ conn.Txn_bgn();
DataRdr rdr = conn.Exec_sql_as_rdr(Sql_select);
long[] ext_maxs = Calc_ext_max();
while (rdr.MoveNextPeer()) {
@@ -36,6 +34,7 @@ public class Xob_xfer_temp_cmd_orig extends Xob_itm_basic_base implements Xob_cm
String orig_media_type = rdr.ReadStrOr(Xob_orig_regy_tbl.Fld_orig_media_type, ""); // convert nulls to ""
lnki_ext = rdr.ReadInt(Xob_orig_regy_tbl.Fld_orig_file_ext);
int lnki_id = rdr.ReadInt(Xob_lnki_regy_tbl.Fld_lnki_id);
+ int lnki_tier_id = rdr.ReadInt(Xob_lnki_regy_tbl.Fld_lnki_tier_id);
byte orig_repo = rdr.ReadByte(Xob_orig_regy_tbl.Fld_orig_repo);
int orig_page_id = rdr.ReadIntOr(Xob_orig_regy_tbl.Fld_orig_page_id, -1);
if (orig_page_id == -1) continue; // no orig found; ignore
@@ -48,7 +47,7 @@ public class Xob_xfer_temp_cmd_orig extends Xob_itm_basic_base implements Xob_cm
int orig_size = rdr.ReadIntOr(Xob_orig_regy_tbl.Fld_orig_size, -1);
if (orig_size > ext_maxs[lnki_ext]) continue;
int lnki_page_id = rdr.ReadInt(Xob_lnki_regy_tbl.Fld_lnki_page_id);
- Xob_xfer_temp_tbl.Insert(trg_stmt, lnki_id, lnki_page_id, orig_repo, orig_page_id, join_ttl, redirect_src, lnki_ext, Xop_lnki_type.Id_none, orig_media_type
+ Xob_xfer_temp_tbl.Insert(trg_stmt, lnki_id, lnki_tier_id, lnki_page_id, orig_repo, orig_page_id, join_ttl, redirect_src, lnki_ext, Xop_lnki_type.Id_none, orig_media_type
, Bool_.Y // orig is y
, orig_w, orig_h
, orig_w, orig_h // file_w, file_h is same as orig_w,orig_h; i.e.: make same file_w as orig_w
@@ -57,7 +56,7 @@ public class Xob_xfer_temp_cmd_orig extends Xob_itm_basic_base implements Xob_cm
, Xof_lnki_page.Null
, 0);
}
- conn.Txn_mgr().Txn_end_all();
+ conn.Txn_end();
}
private long[] Calc_ext_max() {
Xof_rule_grp ext_rules = wiki.Appe().File_mgr().Ext_rules().Get_or_new(ext_rules_key);
@@ -72,7 +71,7 @@ public class Xob_xfer_temp_cmd_orig extends Xob_itm_basic_base implements Xob_cm
}
public void Cmd_run() {}
public void Cmd_end() {}
- public void Cmd_print() {}
+ public void Cmd_term() {}
private static final String
Sql_select = String_.Concat_lines_nl
( "SELECT DISTINCT"
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_cmd_thumb.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_temp_cmd_thumb.java
similarity index 66%
rename from 400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_cmd_thumb.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_temp_cmd_thumb.java
index 7cd9061f5..031e13d3f 100644
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_cmd_thumb.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_temp_cmd_thumb.java
@@ -15,34 +15,44 @@ 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 .
*/
-package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.files.*; import gplx.xowa.bldrs.oimgs.*;
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*; import gplx.xowa.files.*;
public class Xob_xfer_temp_cmd_thumb extends Xob_itm_basic_base implements Xob_cmd {
public Xob_xfer_temp_cmd_thumb(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
- public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.xfer_temp.thumb";
- public void Cmd_ini(Xob_bldr bldr) {}
+ public String Cmd_key() {return Xob_cmd_keys.Key_file_xfer_temp_thumb;}
+ public void Cmd_init(Xob_bldr bldr) {}
public void Cmd_bgn(Xob_bldr bldr) {
- Db_conn conn = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
+ Db_conn conn = Xob_db_file.new__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
Xob_xfer_temp_tbl.Create_table(conn);
Db_stmt trg_stmt = Xob_xfer_temp_tbl.Insert_stmt(conn);
- conn.Txn_mgr().Txn_bgn_if_none();
+ conn.Txn_bgn();
DataRdr rdr = conn.Exec_sql_as_rdr(Sql_select);
Xob_xfer_temp_itm temp_itm = new Xob_xfer_temp_itm();
Xof_img_size img_size = new Xof_img_size();
+ byte[] cur_ttl = Bry_.Empty; byte cur_repo = Byte_.Max_value_127;
while (rdr.MoveNextPeer()) {
temp_itm.Clear();
temp_itm.Load(rdr);
+ if (Bry_.Eq(cur_ttl, temp_itm.Orig_file_ttl())) { // same ttl; DATE:2015-03-22
+ if (temp_itm.Orig_repo() != cur_repo) // if repo is different, ignore 2nd; handles images in both repos; take 1st only (which should be local)
+ continue;
+ }
+ else { // new ttl; update ttl, repo
+ cur_ttl = temp_itm.Orig_file_ttl();
+ cur_repo = temp_itm.Orig_repo();
+ }
if (temp_itm.Chk(img_size))
temp_itm.Insert(trg_stmt, img_size);
}
- conn.Txn_mgr().Txn_end_all();
+ conn.Txn_end();
}
public void Cmd_run() {}
public void Cmd_end() {}
- public void Cmd_print() {}
+ public void Cmd_term() {}
private static final String
Sql_select = String_.Concat_lines_nl
( "SELECT l.lnki_id"
+ , ", l.lnki_tier_id"
, ", l.lnki_page_id"
, ", l.lnki_ext"
, ", l.lnki_type"
@@ -66,6 +76,6 @@ public class Xob_xfer_temp_cmd_thumb extends Xob_itm_basic_base implements Xob_c
, "FROM lnki_regy l"
, " JOIN orig_regy o ON o.lnki_ttl = l.lnki_ttl"
, "WHERE o.orig_file_ttl IS NOT NULL"
- , "ORDER BY o.orig_file_ttl, l.lnki_w DESC"
+ , "ORDER BY o.orig_file_ttl, o.orig_repo DESC, l.lnki_w DESC" // NOTE: local=1,common=0; DATE:2015-03-22
);
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_itm.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_temp_itm.java
similarity index 87%
rename from 400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_itm.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_temp_itm.java
index 944f9e2a2..cbd4698f2 100644
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_itm.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_temp_itm.java
@@ -15,12 +15,14 @@ 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 .
*/
-package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
import gplx.dbs.*; import gplx.xowa.files.*;
class Xob_xfer_temp_itm {
public int Lnki_id() {return lnki_id;} private int lnki_id;
+ public int Lnki_tier_id() {return lnki_tier_id;} private int lnki_tier_id;
public byte Orig_repo() {return orig_repo;} private byte orig_repo;
public int Lnki_ext() {return lnki_ext;} private int lnki_ext;
+ public byte[] Orig_file_ttl() {return orig_file_ttl;} private byte[] orig_file_ttl;
public String Orig_media_type() {return orig_media_type;} private String orig_media_type;
public String Orig_minor_mime() {return orig_minor_mime;} private String orig_minor_mime;
public byte Orig_media_type_tid() {return orig_media_type_tid;} private byte orig_media_type_tid;
@@ -39,11 +41,12 @@ class Xob_xfer_temp_itm {
public double Lnki_upright() {return lnki_upright;} private double lnki_upright;
public double Lnki_thumbtime() {return lnki_thumbtime;} private double lnki_thumbtime;
public int Lnki_page() {return lnki_page;} private int lnki_page;
- public void Clear() {
+ public void Clear() {
+ orig_file_ttl = null;
lnki_ext = lnki_type = lnki_src_tid
= orig_repo = orig_media_type_tid = Byte_.Max_value_127;
chk_tid = Chk_tid_none;
- lnki_id = lnki_w = lnki_h = lnki_count = lnki_page_id
+ lnki_id = lnki_tier_id = lnki_w = lnki_h = lnki_count = lnki_page_id
= orig_w = orig_h = orig_page_id = Int_.Neg1;
join_ttl = redirect_src = orig_media_type = null;
lnki_upright = Xop_lnki_tkn.Upright_null;
@@ -52,6 +55,7 @@ class Xob_xfer_temp_itm {
}
public void Load(DataRdr rdr) {
lnki_id = rdr.ReadInt(Xob_lnki_regy_tbl.Fld_lnki_id);
+ lnki_tier_id = rdr.ReadInt(Xob_lnki_regy_tbl.Fld_lnki_tier_id);
lnki_page_id = rdr.ReadInt(Xob_lnki_regy_tbl.Fld_lnki_page_id);
lnki_ext = rdr.ReadInt(Xob_lnki_regy_tbl.Fld_lnki_ext);
lnki_type = rdr.ReadByte(Xob_lnki_regy_tbl.Fld_lnki_type);
@@ -62,6 +66,7 @@ class Xob_xfer_temp_itm {
lnki_thumbtime = Xof_lnki_time.Db_load_double(rdr, Xob_lnki_regy_tbl.Fld_lnki_time);
lnki_page = rdr.ReadInt(Xob_lnki_regy_tbl.Fld_lnki_page);
lnki_count = rdr.ReadInt(Xob_lnki_regy_tbl.Fld_lnki_count);
+ orig_file_ttl = rdr.ReadBryByStr(Xob_lnki_regy_tbl.Fld_lnki_ttl);
orig_repo = rdr.ReadByte(Xob_orig_regy_tbl.Fld_orig_repo);
orig_page_id = rdr.ReadIntOr(Xob_orig_regy_tbl.Fld_orig_page_id, -1);
join_ttl = rdr.ReadStr(Xob_orig_regy_tbl.Fld_orig_file_ttl);
@@ -121,6 +126,6 @@ class Xob_xfer_temp_itm {
return true;
}
public void Insert(Db_stmt stmt, Xof_img_size img_size) {
- Xob_xfer_temp_tbl.Insert(stmt, lnki_id, lnki_page_id, orig_repo, orig_page_id, join_ttl, redirect_src, lnki_ext, lnki_type, orig_media_type, img_size.File_is_orig(), orig_w, orig_h, img_size.File_w(), img_size.File_h(), img_size.Html_w(), img_size.Html_h(), lnki_thumbtime, lnki_page, lnki_count);
+ Xob_xfer_temp_tbl.Insert(stmt, lnki_id, lnki_tier_id, lnki_page_id, orig_repo, orig_page_id, join_ttl, redirect_src, lnki_ext, lnki_type, orig_media_type, img_size.File_is_orig(), orig_w, orig_h, img_size.File_w(), img_size.File_h(), img_size.Html_w(), img_size.Html_h(), lnki_thumbtime, lnki_page, lnki_count);
}
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_itm_tst.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_temp_itm_tst.java
similarity index 95%
rename from 400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_itm_tst.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_temp_itm_tst.java
index 5e16def34..163e68cd0 100644
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_itm_tst.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_temp_itm_tst.java
@@ -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 .
*/
-package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
import org.junit.*;
import gplx.stores.*; import gplx.xowa.files.*; import gplx.xowa.files.repos.*;
public class Xob_xfer_temp_itm_tst {
@@ -106,6 +106,7 @@ class Xob_xfer_temp_itm_fxt {
public static String[] Flds = new String[]
{ Xob_lnki_regy_tbl.Fld_lnki_ext
, Xob_lnki_regy_tbl.Fld_lnki_id
+ , Xob_lnki_regy_tbl.Fld_lnki_tier_id
, Xob_orig_regy_tbl.Fld_orig_repo
, Xob_orig_regy_tbl.Fld_orig_file_ttl
, Xob_orig_regy_tbl.Fld_orig_file_ext
@@ -133,7 +134,7 @@ class Xob_xfer_temp_itm_fxt {
public Xob_xfer_temp_itm_fxt Init_rdr_image() {
GfoFldList flds = GfoFldList_.str_(Flds);
nde = GfoNde_.vals_(flds, Object_.Ary
- ( Xof_ext_.Id_png, 1, Xof_repo_itm.Repo_remote
+ ( Xof_ext_.Id_png, 1, 1, Xof_repo_itm.Repo_remote
, "A.png", Xof_ext_.Id_png, "A.png", Xop_lnki_type.Id_thumb, Xob_lnki_src_tid.Tid_file
, 220, 200, 1, 2, 440, 400, 3
, Xop_lnki_tkn.Upright_null, Xof_lnki_time.Null, Xof_lnki_page.Null
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_tbl.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_temp_tbl.java
similarity index 73%
rename from 400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_tbl.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_temp_tbl.java
index 35240bf0d..af930980c 100644
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_tbl.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_temp_tbl.java
@@ -15,14 +15,15 @@ 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 .
*/
-package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.files.*;
class Xob_xfer_temp_tbl {
public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql);}
- public static Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_lnki_id, Fld_lnki_page_id, Fld_orig_repo, Fld_orig_page_id, Fld_lnki_ttl, Fld_orig_redirect_src, Fld_lnki_ext, Fld_lnki_type, Fld_orig_media_type, Fld_file_is_orig, Fld_orig_w, Fld_orig_h, Fld_file_w, Fld_file_h, Fld_html_w, Fld_html_h, Fld_lnki_time, Fld_lnki_page, Fld_lnki_count);}
- public static void Insert(Db_stmt stmt, int lnki_id, int lnki_page_id, byte repo_id, int page_id, String ttl, String redirect_src, int ext_id, byte lnki_type, String orig_media_type, boolean file_is_orig, int orig_w, int orig_h, int html_w, int html_h, int file_w, int file_h, double thumbtime, int page, int count) {
+ public static Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_lnki_id, Fld_lnki_tier_id, Fld_lnki_page_id, Fld_orig_repo, Fld_orig_page_id, Fld_lnki_ttl, Fld_orig_redirect_src, Fld_lnki_ext, Fld_lnki_type, Fld_orig_media_type, Fld_file_is_orig, Fld_orig_w, Fld_orig_h, Fld_file_w, Fld_file_h, Fld_html_w, Fld_html_h, Fld_lnki_time, Fld_lnki_page, Fld_lnki_count);}
+ public static void Insert(Db_stmt stmt, int lnki_id, int lnki_tier_id, int lnki_page_id, byte repo_id, int page_id, String ttl, String redirect_src, int ext_id, byte lnki_type, String orig_media_type, boolean file_is_orig, int orig_w, int orig_h, int html_w, int html_h, int file_w, int file_h, double thumbtime, int page, int count) {
stmt.Clear()
.Val_int(lnki_id)
+ .Val_int(lnki_tier_id)
.Val_int(lnki_page_id)
.Val_byte(repo_id)
.Val_int(page_id)
@@ -44,7 +45,7 @@ class Xob_xfer_temp_tbl {
.Exec_insert();
}
public static final String Tbl_name = "xfer_temp"
- , Fld_lnki_id = "lnki_id", Fld_lnki_page_id = "lnki_page_id", Fld_lnki_ttl = "lnki_ttl", Fld_lnki_ext = "lnki_ext", Fld_lnki_type = "lnki_type"
+ , Fld_lnki_id = "lnki_id", Fld_lnki_tier_id = "lnki_tier_id", Fld_lnki_page_id = "lnki_page_id", Fld_lnki_ttl = "lnki_ttl", Fld_lnki_ext = "lnki_ext", Fld_lnki_type = "lnki_type"
, Fld_lnki_time = "lnki_time", Fld_lnki_page = "lnki_page", Fld_lnki_count = "lnki_count"
, Fld_orig_repo = "orig_repo", Fld_orig_page_id = "orig_page_id", Fld_orig_redirect_src = "orig_redirect_src", Fld_orig_media_type = "orig_media_type"
, Fld_orig_w = "orig_w", Fld_orig_h = "orig_h"
@@ -54,6 +55,7 @@ class Xob_xfer_temp_tbl {
private static final String Tbl_sql = String_.Concat_lines_nl
( "CREATE TABLE IF NOT EXISTS xfer_temp"
, "( lnki_id integer NOT NULL PRIMARY KEY"
+ , ", lnki_tier_id integer NOT NULL"
, ", lnki_page_id integer NOT NULL"
, ", lnki_ttl varchar(255) NOT NULL"
, ", lnki_ext integer NOT NULL"
diff --git a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_xfer_update_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_update_cmd.java
similarity index 85%
rename from 400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_xfer_update_cmd.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_update_cmd.java
index 967e5833f..002237fdf 100644
--- a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_xfer_update_cmd.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_update_cmd.java
@@ -15,20 +15,18 @@ 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 .
*/
-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.files.*; import gplx.xowa.bldrs.files.*;
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.files.*; import gplx.xowa.bldrs.cmds.files.*;
public class Xob_xfer_update_cmd extends Xob_itm_basic_base implements Xob_cmd {
private Io_url prv_url;
public Xob_xfer_update_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
- public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "oimg.xfer_update";
- public void Cmd_ini(Xob_bldr bldr) {}
- public void Cmd_bgn(Xob_bldr bldr) {}
+ public String Cmd_key() {return Xob_cmd_keys.Key_file_xfer_update;}
public void Cmd_run() {
// init vars
- Xodb_db_file cur_file = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir());
+ Xob_db_file cur_file = Xob_db_file.new__file_make(wiki.Fsys_mgr().Root_dir());
Db_conn conn = cur_file.Conn();
if (prv_url == null) {
- prv_url = wiki.Appe().Fsys_mgr().File_dir().GenSubFil_nest(wiki.Domain_str(), "bldr", Xodb_db_file.Name__file_make);
+ prv_url = wiki.Appe().Fsys_mgr().File_dir().GenSubFil_nest(wiki.Domain_str(), "bldr", Xob_db_file.Name__file_make);
}
// run sql
@@ -46,8 +44,10 @@ public class Xob_xfer_update_cmd extends Xob_itm_basic_base implements Xob_cmd {
// Io_mgr._.CopyFil(cur_file.Url(), archive_url, true);
// Io_mgr._.CopyFil(cur_file.Url(), prv_url, true);
}
+ public void Cmd_init(Xob_bldr bldr) {}
+ public void Cmd_bgn(Xob_bldr bldr) {}
public void Cmd_end() {}
- public void Cmd_print() {}
+ public void Cmd_term() {}
public static final String Sql_update = String_.Concat_lines_nl
( "INSERT INTO xfer_regy"
, "SELECT cur.lnki_id"
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xobu_poll_mgr.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xobu_poll_mgr.java
similarity index 92%
rename from 400_xowa/src/gplx/xowa/bldrs/files/Xobu_poll_mgr.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/files/Xobu_poll_mgr.java
index f439086d8..dfb02e6a3 100644
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xobu_poll_mgr.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xobu_poll_mgr.java
@@ -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 .
*/
-package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
public class Xobu_poll_mgr implements GfoInvkAble {
public Xobu_poll_mgr(Xoae_app app) {this.app = app;} private Xoae_app app;
public int Poll_interval() {return poll_interval;} private int poll_interval = 1000;
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_base.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/Xob_init_base.java
similarity index 76%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_base.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/texts/Xob_init_base.java
index 615d18792..3883168db 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_base.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/Xob_init_base.java
@@ -15,22 +15,25 @@ 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 .
*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.xowa.wikis.*; import gplx.xowa.xtns.wdatas.*; import gplx.xowa.bldrs.xmls.*;
+package gplx.xowa.bldrs.cmds.texts; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.xowa.wikis.*; import gplx.xowa.xtns.wdatas.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.xmls.*;
public abstract class Xob_init_base implements Xob_cmd, GfoInvkAble {
- public Xob_init_base Ctor(Xob_bldr bldr, Xowe_wiki wiki) {this.bldr = bldr; this.wiki = wiki; this.usr_dlg = wiki.Appe().Usr_dlg(); return this;} private Xob_bldr bldr; Xowe_wiki wiki; Gfo_usr_dlg usr_dlg;
+ private Xob_bldr bldr; private Xowe_wiki wiki; private Gfo_usr_dlg usr_dlg;
+ private byte wbase_enabled = Bool_.__byte;
+ public Xob_init_base Ctor(Xob_bldr bldr, Xowe_wiki wiki) {this.bldr = bldr; this.wiki = wiki; this.usr_dlg = wiki.Appe().Usr_dlg(); return this;}
public abstract String Cmd_key();
public abstract void Cmd_ini_wdata(Xob_bldr bldr, Xowe_wiki wiki);
public abstract void Cmd_run_end(Xowe_wiki wiki);
- public void Cmd_ini(Xob_bldr bldr) { // add other cmds; EX: wikidata
- Xob_import_marker.Import_bgn(wiki);
- if (wdata_enabled == Bool_.__byte) wdata_enabled = wiki.Domain_tid() == Xow_domain_.Tid_int_wikidata ? Bool_.Y_byte : Bool_.N_byte; // if wdata_enabled not explicitly set, set it to y if wiki is "www.wikidata.org"
- if (wdata_enabled == Bool_.Y_byte) // if wdata_enabled, auto-add wdata_wkrs bldr
+ public void Cmd_init(Xob_bldr bldr) { // add other cmds; EX: wikidata
+ bldr.Import_marker().Bgn(wiki);
+ if (wbase_enabled == Bool_.__byte) wbase_enabled = wiki.Domain_tid() == Xow_domain_.Tid_int_wikidata ? Bool_.Y_byte : Bool_.N_byte; // if wbase_enabled not explicitly set, set it to y if wiki is "www.wikidata.org"
+ if (wbase_enabled == Bool_.Y_byte) // if wbase_enabled, auto-add wdata_wkrs bldr
this.Cmd_ini_wdata(bldr, wiki);
- } private byte wdata_enabled = Bool_.__byte;
+ }
public void Cmd_bgn(Xob_bldr bldr) {}
public void Cmd_run() { // parse site_info
gplx.ios.Io_stream_rdr src_rdr = wiki.Import_cfg().Src_rdr();
+ usr_dlg.Plog_many("", "", "reading dump header: ~{0}", src_rdr.Url().Raw());
byte[] siteinfo_xml = Xob_siteinfo_parser.Siteinfo_extract(src_rdr);
Xob_siteinfo_parser.Siteinfo_parse(wiki, usr_dlg, String_.new_utf8_(siteinfo_xml));
this.Cmd_run_end(wiki); // save site info
@@ -43,11 +46,11 @@ public abstract class Xob_init_base implements Xob_cmd, GfoInvkAble {
Io_mgr._.DeleteFil_args(url).MissingFails_off().Exec();
}
}
- public void Cmd_print() {}
+ public void Cmd_term() {}
@gplx.Virtual public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_src_xml_fil_)) wiki.Import_cfg().Src_fil_xml_(m.ReadIoUrl("v"));
else if (ctx.Match(k, Invk_src_bz2_fil_)) wiki.Import_cfg().Src_fil_bz2_(m.ReadIoUrl("v"));
- else if (ctx.Match(k, Invk_wdata_enabled_)) wdata_enabled = m.ReadYn("v") ? Bool_.Y_byte : Bool_.N_byte;
+ else if (ctx.Match(k, Invk_wdata_enabled_)) wbase_enabled = m.ReadYn("v") ? Bool_.Y_byte : Bool_.N_byte;
else if (ctx.Match(k, Invk_owner)) return bldr.Cmd_mgr();
else return GfoInvkAble_.Rv_unhandled;
return this;
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_base.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/Xob_search_base.java
similarity index 89%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_base.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/texts/Xob_search_base.java
index 084e836cb..d50c0c9f1 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_base.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/Xob_search_base.java
@@ -15,10 +15,10 @@ 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 .
*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+package gplx.xowa.bldrs.cmds.texts; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
import gplx.core.primitives.*;
import gplx.ios.*;
-import gplx.xowa.wikis.data.*; import gplx.xowa.dbs.*; import gplx.xowa.tdbs.*;
+import gplx.xowa.wikis.data.*; import gplx.xowa.dbs.*; import gplx.xowa.tdbs.*; import gplx.xowa.wikis.data.tbls.*;
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();
@@ -31,7 +31,7 @@ public abstract class Xob_search_base extends Xob_itm_dump_base implements Xobd_
if (wiki.Db_mgr().Tid() == Xodb_mgr_sql.Tid_sql) // if sqlite, hard-code to ns_main; aggregates all ns into one
ns_main = wiki.Ns_mgr().Ns_main();
} private Xob_tmp_wtr_mgr tmp_wtr_mgr; private Xow_ns ns_main;
- public void Wkr_run(Xodb_page page) {
+ public void Wkr_run(Xowd_page_itm page) {
// if (page.Ns_id() != Xow_ns_.Id_main) return; // limit to main ns for now
try {
byte[] ttl = page.Ttl_page_db();
@@ -48,7 +48,7 @@ public abstract class Xob_search_base extends Xob_itm_dump_base implements Xobd_
byte[] word = words[i];
wtr.Bfr() .Add(word) .Add_byte(Byte_ascii.Pipe)
.Add_base85_len_5(page.Id()) .Add_byte(Byte_ascii.Semic)
- .Add_base85_len_5(page.Wtxt().length) .Add_byte(Byte_ascii.NewLine);
+ .Add_base85_len_5(page.Text().length) .Add_byte(Byte_ascii.NewLine);
}
} catch (Exception e) {bldr.Usr_dlg().Warn_many("", "", "search_index:fatal error: err=~{0}", Err_.Message_gplx_brief(e));} // never let single page crash entire import
}
@@ -58,10 +58,6 @@ public abstract class Xob_search_base extends Xob_itm_dump_base implements Xobd_
Xobdc_merger.Ns(bldr.Usr_dlg(), tmp_wtr_mgr.Regy(), Xotdb_dir_info_.Name_search_ttl, temp_dir, make_dir, sort_mem_len, Io_line_rdr_key_gen_.first_pipe, this.Make_cmd_site());
tmp_wtr_mgr.Rls_all();
if (delete_temp) Io_mgr._.DeleteDirDeep(temp_dir);
- if (wiki.Db_mgr().Tid() == Xodb_mgr_sql.Tid_sql) {
- 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() {}
OrderedHash list = OrderedHash_.new_(); Xol_lang lang;
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_base.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/Xob_term_base.java
similarity index 81%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_base.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/texts/Xob_term_base.java
index 5f8da6b4c..37c95b0e5 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_base.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/Xob_term_base.java
@@ -15,13 +15,12 @@ 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 .
*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.xowa.xtns.wdatas.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.dbs.*;
-import gplx.xowa.bldrs.xmls.*;
+package gplx.xowa.bldrs.cmds.texts; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.xowa.bldrs.xmls.*; import gplx.xowa.xtns.wdatas.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.dbs.*;
public abstract class Xob_term_base implements Xob_cmd, GfoInvkAble {
public Xob_term_base Ctor(Xob_bldr bldr, Xowe_wiki wiki) {this.wiki = wiki; return this;} private Xowe_wiki wiki;
public abstract String Cmd_key();
- public void Cmd_ini(Xob_bldr bldr) {}
+ public void Cmd_init(Xob_bldr bldr) {}
public void Cmd_bgn(Xob_bldr bldr) {}
public void Cmd_run() {}
public void Cmd_end() {
@@ -29,13 +28,13 @@ public abstract class Xob_term_base implements Xob_cmd, GfoInvkAble {
app.Gui_mgr().Html_mgr().Portal_mgr().Wikis().Itms_reset(); // NOTE: dirty wiki list so that next refresh will load itm
app.Free_mem(false); // clear cache, else import will load new page with old items from cache; DATE:2013-11-21
wiki.Props().Main_page_update(wiki);
- Xob_import_marker.Import_end(wiki);
+ app.Bldr().Import_marker().End(wiki);
wiki.Init_needed_(true);// flag init_needed prior to show; dir_info will show page_txt instead of page_gz;
wiki.Init_assert(); // force load; needed to pick up MediaWiki ns for MediaWiki:mainpage
Cmd_end_hook();
}
public abstract void Cmd_end_hook();
- public void Cmd_print() {}
+ public void Cmd_term() {}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
return this;
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_css_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_css_cmd.java
new file mode 100644
index 000000000..bb0f68d95
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_css_cmd.java
@@ -0,0 +1,44 @@
+/*
+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 .
+*/
+package gplx.xowa.bldrs.cmds.texts.sqls; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.bldrs.cmds.texts.*;
+import gplx.xowa.bldrs.*; import gplx.xowa.wikis.*; import gplx.xowa.wikis.data.*;
+public class Xob_css_cmd implements Xob_cmd {
+ private final Xob_bldr bldr; private final Xowe_wiki wiki; private final Gfo_usr_dlg usr_dlg;
+ public Xob_css_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.bldr = bldr; this.wiki = wiki; this.usr_dlg = wiki.Appe().Usr_dlg();}
+ public String Cmd_key() {return Xob_cmd_keys.Key_text_css;}
+ public void Cmd_init(Xob_bldr bldr) {}
+ public void Cmd_bgn(Xob_bldr bldr) {}
+ public void Cmd_run() {
+ usr_dlg.Plog_many("", "", Cmd_key() + ":bgn;");
+ Io_url css_dir = bldr.App().User().Fsys_mgr().Wiki_html_dir(wiki.Domain_str()); // EX: /xowa/user/anonymous/wiki/en.wikipedia.org
+ bldr.App().Css_installer().Install_assert(Bool_.N, wiki, css_dir);
+ usr_dlg.Plog_many("", "", Cmd_key() + ":css_dir; dir=~{0}", css_dir.Raw());
+ wiki.Init_db_mgr();// NOTE: must follow Install_assert b/c Init_assert also calls Install_assert; else will download any css from db
+ Xowd_db_file core_db = wiki.Db_mgr_as_sql().Core_data_mgr().Db__core();
+ core_db.Conn().Txn_bgn();
+ core_db.Tbl__css_core().Create_tbl();
+ core_db.Tbl__css_file().Create_tbl();
+ gplx.xowa.html.css.Xowd_css_core_mgr.Set(core_db.Tbl__css_core(), core_db.Tbl__css_file(), css_dir);
+ core_db.Tbl__cfg().Insert_yn(Xow_cfg_consts.Grp__wiki_schema, Xow_cfg_consts.Key__schema__tbl_css_core, Bool_.Y);
+ core_db.Conn().Txn_end();
+ usr_dlg.Plog_many("", "", Cmd_key() + ":end;");
+ }
+ public void Cmd_end() {}
+ public void Cmd_term() {}
+ public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {return GfoInvkAble_.Rv_unhandled;}
+}
diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_init_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_init_cmd.java
new file mode 100644
index 000000000..91e2da5e6
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_init_cmd.java
@@ -0,0 +1,33 @@
+/*
+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 .
+*/
+package gplx.xowa.bldrs.cmds.texts.sqls; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.bldrs.cmds.texts.*;
+import gplx.xowa.bldrs.*; import gplx.xowa.apis.xowa.bldrs.imports.*;
+import gplx.xowa.xtns.wdatas.imports.*;
+public class Xob_init_cmd extends Xob_init_base {
+ public Xob_init_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Ctor(bldr, wiki);}
+ @Override public String Cmd_key() {return Xob_cmd_keys.Key_text_init;}
+ @Override public void Cmd_ini_wdata(Xob_bldr bldr, Xowe_wiki wiki) {
+ bldr.Cmd_mgr().Add_cmd(wiki, Xob_cmd_keys.Key_wbase_qid);
+ bldr.Cmd_mgr().Add_cmd(wiki, Xob_cmd_keys.Key_wbase_pid);
+ }
+ @Override public void Cmd_run_end(Xowe_wiki wiki) {
+ if (gplx.xowa.wikis.Xow_fsys_mgr.Find_core_fil(wiki) != null)
+ throw wiki.Appe().Bldr().Usr_dlg().Fail_many("", "", "directory must not contain any .xowa or .sqlite3 files: dir=~{0}", wiki.Fsys_mgr().Root_dir().Raw());
+ Xowe_wiki_bldr.Create(wiki, wiki.Import_cfg().Src_rdr_len(), wiki.Import_cfg().Src_fil().NameOnly());
+ }
+}
diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_page_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_page_cmd.java
new file mode 100644
index 000000000..52eb6a0ea
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_page_cmd.java
@@ -0,0 +1,111 @@
+/*
+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 .
+*/
+package gplx.xowa.bldrs.cmds.texts.sqls; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.bldrs.cmds.texts.*;
+import gplx.dbs.*; import gplx.ios.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.bldrs.cmds.wikis.*;
+import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.dbs.*;
+import gplx.xowa.wikis.*; import gplx.xowa.bldrs.filters.dansguardians.*; import gplx.xowa.apis.xowa.bldrs.imports.*;
+public class Xob_page_cmd extends Xob_itm_basic_base implements Xobd_wkr, GfoInvkAble {
+ private Xowd_db_mgr db_mgr; private Db_idx_mode idx_mode = Db_idx_mode.Itm_end; private Xowd_page_tbl page_core_tbl; private Io_stream_zip_mgr text_zip_mgr; private byte text_zip_tid;
+ private Xop_redirect_mgr redirect_mgr; private Xob_redirect_tbl redirect_tbl; private boolean redirect_id_enabled;
+ private DateAdp modified_latest = DateAdp_.MinValue; private int page_count_all, page_count_main = 0; private int commit_interval = 100000; // 100 k
+ private Dg_match_mgr dg_match_mgr; private final Xow_page_mgr page_mgr; private Xob_ns_to_db_mgr ns_to_db_mgr;
+ public Xob_page_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki); this.page_mgr = wiki.Page_mgr();}
+ public String Wkr_key() {return Xob_cmd_keys.Key_text_page;}
+ public void Wkr_bgn(Xob_bldr bldr) {
+ Xoae_app app = wiki.Appe();
+ Xoapi_import import_cfg = app.Api_root().Bldr().Wiki().Import();
+ this.redirect_mgr = wiki.Redirect_mgr();
+ this.db_mgr = wiki.Db_mgr_as_sql().Core_data_mgr();
+ this.page_core_tbl = db_mgr.Tbl__page();
+ this.text_zip_mgr = Xoa_app_.Utl__zip_mgr(); text_zip_tid = import_cfg.Zip_tid_text();
+ this.ns_to_db_mgr = new Xob_ns_to_db_mgr(new Xob_ns_to_db_wkr__text(), db_mgr, import_cfg.Text_db_max());
+ if (redirect_id_enabled) {
+ this.redirect_tbl = new Xob_redirect_tbl(wiki.Fsys_mgr().Root_dir(), Xoa_app_.Utl__encoder_mgr().Url_ttl()).Create_table();
+ redirect_tbl.Conn().Txn_bgn();
+ }
+ this.dg_match_mgr = app.Api_root().Bldr().Wiki().Filter().Dansguardian().New_mgr(wiki.Domain_str(), wiki.Fsys_mgr().Root_dir());
+ app.Bldr().Dump_parser().Trie_tab_del_(); // disable swapping for \t
+ byte[] ns_file_map = import_cfg.New_ns_file_map(wiki.Import_cfg().Src_rdr_len());
+ Xob_ns_file_itm.Init_ns_bldr_data(Xowd_db_file_.Tid_text, wiki.Ns_mgr(), ns_file_map);
+ if (idx_mode.Tid_is_bgn()) page_core_tbl.Create_index();
+ page_core_tbl.Insert_bgn();
+ usr_dlg.Prog_many("", "", "import.page.bgn");
+ }
+ public void Wkr_run(Xowd_page_itm page) {
+ int id = page.Id();
+ DateAdp modified = page.Modified_on(); if (modified.compareTo(modified_latest) == CompareAble_.More) modified_latest = modified;
+ byte[] text_raw = page.Text(); int text_raw_len = page.Text_len();
+ Xoa_ttl redirect_ttl = redirect_mgr.Extract_redirect(text_raw, text_raw_len); boolean redirect = redirect_ttl != null;
+ page.Redirected_(redirect);
+ Xow_ns ns = page.Ns();
+ int random_int = ns.Count() + 1; ns.Count_(random_int);
+ if (dg_match_mgr != null) {
+ if (dg_match_mgr.Match(1, id, ns.Id(), page.Ttl_page_db(), page.Ttl_full_db(), wiki.Lang(), text_raw)) return;
+ }
+ byte[] text_zip = text_zip_mgr.Zip(text_zip_tid, text_raw);
+ Xowd_db_file text_db = ns_to_db_mgr.Get_by_ns(ns.Bldr_data(), text_zip.length);
+ page_mgr.Create(page_core_tbl, text_db.Tbl__text(), id, page.Ns_id(), page.Ttl_page_db(), redirect, modified, text_zip, text_raw_len, random_int, text_db.Id(), -1);
+ if (redirect && redirect_id_enabled)
+ redirect_tbl.Insert(id, page.Ttl_page_db(), redirect_ttl);
+ ++page_count_all;
+ if (ns.Id_main() && !page.Redirected()) ++page_count_main;
+ if (page_count_all % commit_interval == 0) {
+ page_core_tbl.Conn().Txn_sav(); text_db.Conn().Txn_sav();
+ if (redirect_id_enabled) redirect_tbl.Conn().Txn_sav();
+ if (dg_match_mgr != null) dg_match_mgr.Commit();
+ }
+ }
+ public void Wkr_end() {
+ usr_dlg.Log_many("", "", "import.page: insert done; committing pages; pages=~{0}", page_count_all);
+ page_core_tbl.Insert_end(); ns_to_db_mgr.Rls_all();
+ if (dg_match_mgr != null) dg_match_mgr.Rls();
+ usr_dlg.Log_many("", "", "import.page: updating core stats");
+ Xow_ns_mgr ns_mgr = wiki.Ns_mgr();
+ Xowd_db_file db_core = db_mgr.Db__core();
+ db_core.Tbl__site_stats().Update(page_count_main, page_count_all, ns_mgr.Ns_file().Count()); // save page stats
+ db_core.Tbl__ns().Insert(ns_mgr); // save ns
+ db_mgr.Tbl__cfg().Insert_str(Xow_cfg_consts.Grp_wiki_init, "props.modified_latest", modified_latest.XtoStr_fmt(DateAdp_.Fmt_iso8561_date_time));
+ if (idx_mode.Tid_is_end()) page_core_tbl.Create_index();
+ if (redirect_id_enabled) {
+ redirect_tbl.Conn().Txn_end();
+ redirect_tbl.Update_trg_redirect_id(db_core.Url(), 1);
+ redirect_tbl.Update_src_redirect_id(db_core.Url(), page_core_tbl.Conn());
+ }
+ }
+ @Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
+ if (ctx.Match(k, Invk_commit_interval_)) commit_interval = m.ReadInt("v");
+ else if (ctx.Match(k, Invk_idx_mode_)) idx_mode = Db_idx_mode.Xto_itm(m.ReadStr("v"));
+ else if (ctx.Match(k, Invk_redirect_id_enabled_)) redirect_id_enabled = m.ReadYn("v");
+ else return super.Invk(ctx, ikey, k, m);
+ return this;
+ }
+ private static final String Invk_commit_interval_ = "commit_interval_", Invk_idx_mode_ = "idx_mode_", Invk_redirect_id_enabled_ = "redirect_id_enabled_";
+ public void Wkr_ini(Xob_bldr bldr) {}
+ public void Wkr_print() {}
+}
+class Xob_ns_to_db_wkr__text implements Xob_ns_to_db_wkr {
+ public byte Db_tid() {return Xowd_db_file_.Tid_text;}
+ public void Tbl_init(Xowd_db_file db) {
+ Xowd_text_tbl tbl = db.Tbl__text();
+ tbl.Create_tbl();
+ tbl.Insert_bgn();
+ }
+ public void Tbl_term(Xowd_db_file db) {
+ db.Tbl__text().Insert_end();
+ }
+}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_sql_tst.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_page_cmd_tst.java
similarity index 77%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_sql_tst.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_page_cmd_tst.java
index 170303748..3d4b0fe81 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_sql_tst.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_page_cmd_tst.java
@@ -15,19 +15,20 @@ 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 .
*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import org.junit.*; import gplx.dbs.*; import gplx.xowa.specials.search.*; import gplx.xowa.bldrs.imports.ctgs.*;
-public class Xob_page_sql_tst {
+package gplx.xowa.bldrs.cmds.texts.sqls; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.bldrs.cmds.texts.*;
+import org.junit.*; import gplx.dbs.*; import gplx.xowa.specials.search.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.ctgs.*;
+public class Xob_page_cmd_tst {
@Before public void init() {if (Xoa_test_.Db_skip()) return; fxt.Ctor_fsys();} Db_mgr_fxt fxt = new Db_mgr_fxt();
@After public void term() {if (Xoa_test_.Db_skip()) return; fxt.Rls();}
@Test public void Basic() {
if (Xoa_test_.Db_skip()) return;
fxt.Init_db_sqlite();
+ fxt.Bldr().App().Api_root().Bldr().Wiki().Import().Zip_tid_text_raw_();
fxt.doc_ary_
( fxt.doc_(2, "2013-06-03 01:23", "A", "text_a")
, fxt.doc_(1, "2013-06-03 12:34", "B", "#REDIRECT [[A]]")
)
- .Exec_run(new Xob_page_sql(fxt.Bldr(), fxt.Wiki()))
+ .Exec_run(new Xob_page_cmd(fxt.Bldr(), fxt.Wiki()))
;
fxt.Test_load_ttl(Xow_ns_.Id_main, "A", fxt.page_(2, "2013-06-03 01:23", false, 6));
fxt.Test_load_page(Xow_ns_.Id_main, 2, "text_a");
diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_search_sql_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_search_sql_cmd.java
new file mode 100644
index 000000000..efd7dd2e0
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_search_sql_cmd.java
@@ -0,0 +1,85 @@
+/*
+XOWA: the XOWA Offline Wiki Application
+Copyright (C) 2012 gnosygnu@gmail.com
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see .
+*/
+package gplx.xowa.bldrs.cmds.texts.sqls; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.bldrs.cmds.texts.*;
+import gplx.xowa.wikis.data.*; import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.bldrs.*;
+public class Xob_search_sql_cmd extends Xob_itm_basic_base implements Xob_cmd { // search version 2; upgrade
+ private int commit_interval = 100000, progress_interval = 10000;
+ public Xob_search_sql_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
+ public String Cmd_key() {return Xob_cmd_keys.Key_text_search_cmd;}
+ public void Cmd_init(Xob_bldr bldr) {}
+ public void Cmd_bgn(Xob_bldr bldr) {}
+ public void Cmd_run() {this.Exec(wiki);}
+ public void Cmd_end() {}
+ public void Cmd_term() {}
+ public void Exec(Xowe_wiki wiki) {
+ if (!Env_.Mode_testing()) wiki.Init_assert();
+ Xowd_db_mgr db_mgr = wiki.Db_mgr_as_sql().Core_data_mgr();
+ db_mgr.Dbs__delete_by_tid(Xowd_db_file_.Tid_search_core);
+ Xowd_db_file search_db = Xob_search_sql_cmd.Dbs__get_or_make(db_mgr);
+ Db_conn search_conn = search_db.Conn();
+ Xowd_search_temp_tbl search_temp_tbl = new Xowd_search_temp_tbl(search_conn, db_mgr.Props().Schema_is_1());
+ search_temp_tbl.Create_tbl();
+ search_temp_tbl.Insert_bgn();
+ Xowd_page_tbl page_tbl = db_mgr.Tbl__page();
+ Db_rdr page_rdr = page_tbl.Select_all();
+ try {
+ Xol_lang lang = wiki.Lang();
+ Bry_bfr bfr = Bry_bfr.reset_(1024);
+ OrderedHash hash = OrderedHash_.new_();
+ int page_count = 0;
+ String fld_page_id = page_tbl.Fld_page_id(), fld_page_ttl = page_tbl.Fld_page_title();
+ while (page_rdr.Move_next()) {
+ int page_id = page_rdr.Read_int(fld_page_id);
+ byte[] ttl = page_rdr.Read_bry_by_str(fld_page_ttl);
+ byte[][] words = Xob_search_base.Split(lang, hash, bfr, ttl);
+ int words_len = words.length;
+ for (int i = 0; i < words_len; i++) {
+ byte[] word = words[i];
+ search_temp_tbl.Insert_cmd_by_batch(page_id, word);
+ }
+ ++page_count;
+ if ((page_count % commit_interval) == 0)
+ Commit(search_conn);
+ else if ((page_count % progress_interval) == 0)
+ usr_dlg.Prog_many("", "", "parse progress: count=~{0} last=~{1}", page_count, String_.new_utf8_(ttl));
+ }
+ this.Commit(search_conn);
+ }
+ finally {page_rdr.Rls();}
+ search_conn.Txn_end();
+ search_temp_tbl.Make_data(usr_dlg, db_mgr.Db__search().Tbl__search_link(), db_mgr.Db__search().Tbl__search_word());
+ }
+ private void Commit(Db_conn search_conn) {
+ search_conn.Txn_sav();
+ }
+ @Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
+ if (ctx.Match(k, Invk_commit_interval_)) commit_interval = m.ReadInt("v");
+ else if (ctx.Match(k, Invk_progress_interval_)) progress_interval = m.ReadInt("v");
+ else return GfoInvkAble_.Rv_unhandled;
+ return this;
+ } private static final String Invk_progress_interval_ = "progress_interval_", Invk_commit_interval_ = "commit_interval_";
+ public static Xowd_db_file Dbs__get_or_make(Xowd_db_mgr db_mgr) {
+ Xowd_db_file db = db_mgr.Props().Layout_text().Tid_is_all_or_few()
+ ? db_mgr.Db__core()
+ : db_mgr.Dbs__make_by_tid(Xowd_db_file_.Tid_search_core)
+ ;
+ db.Tbl__search_word().Create_tbl();
+ db.Tbl__search_link().Create_tbl();
+ return db;
+ }
+}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_cmd_tst.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_search_sql_cmd_tst.java
similarity index 75%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_cmd_tst.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_search_sql_cmd_tst.java
index c11a67b8b..1a8ada21e 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_cmd_tst.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_search_sql_cmd_tst.java
@@ -15,10 +15,11 @@ 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 .
*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import org.junit.*; import gplx.dbs.*; import gplx.xowa.specials.search.*; import gplx.xowa.bldrs.imports.ctgs.*;
+package gplx.xowa.bldrs.cmds.texts.sqls; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.bldrs.cmds.texts.*;
+import org.junit.*; import gplx.dbs.*; import gplx.xowa.specials.search.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.texts.*; import gplx.xowa.bldrs.cmds.ctgs.*;
+import gplx.xowa.wikis.data.tbls.*;
public class Xob_search_sql_cmd_tst {
- @Before public void init() {if (Xoa_test_.Db_skip()) return; fxt.Ctor_fsys();} private Db_mgr_fxt fxt = new Db_mgr_fxt();
+ @Before public void init() {if (Xoa_test_.Db_skip()) return; fxt.Ctor_fsys();} private final Db_mgr_fxt fxt = new Db_mgr_fxt();
@After public void term() {if (Xoa_test_.Db_skip()) return; fxt.Rls();}
@Test public void Basic() {
if (Xoa_test_.Db_skip()) return;
@@ -27,7 +28,7 @@ public class Xob_search_sql_cmd_tst {
( fxt.doc_ttl_(2, "A b")
, fxt.doc_ttl_(1, "B c")
)
- .Exec_run(new Xob_page_sql(fxt.Bldr(), fxt.Wiki()))
+ .Exec_run(new Xob_page_cmd(fxt.Bldr(), fxt.Wiki()))
.Exec_run(new Xob_search_sql_cmd(fxt.Bldr(), fxt.Wiki()))
;
fxt.Test_search("a", 2);
@@ -43,7 +44,7 @@ public class Xob_search_sql_cmd_tst {
, fxt.doc_ttl_(2, "A2")
, fxt.doc_ttl_(3, "A3")
)
- .Exec_run(new Xob_page_sql(fxt.Bldr(), fxt.Wiki()))
+ .Exec_run(new Xob_page_cmd(fxt.Bldr(), fxt.Wiki()))
.Exec_run(new Xob_search_sql_cmd(fxt.Bldr(), fxt.Wiki()))
;
fxt.Test_search("a*", 1, 2, 3);
diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_search_sql_wkr.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_search_sql_wkr.java
new file mode 100644
index 000000000..330992a6c
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_search_sql_wkr.java
@@ -0,0 +1,52 @@
+/*
+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 .
+*/
+package gplx.xowa.bldrs.cmds.texts.sqls; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.bldrs.cmds.texts.*;
+import gplx.ios.*;
+import gplx.xowa.wikis.data.*; import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.wikis.data.tbls.*;
+public class Xob_search_sql_wkr extends Xob_search_base implements Io_make_cmd { // search version 2
+ private Xowd_db_mgr db_mgr; private Xowd_search_link_tbl search_page_tbl; private Xowd_search_word_tbl search_word_tbl;
+ private int search_id = 0; private byte[] prv_word = Bry_.Empty;
+ public Xob_search_sql_wkr(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
+ @Override public String Wkr_key() {return Xob_cmd_keys.Key_text_search_wkr;}
+ @Override public gplx.ios.Io_make_cmd Make_cmd_site() {return this;}
+ public Io_sort_cmd Make_dir_(Io_url v) {return this;} // noop
+ public void Sort_bgn() {
+ this.usr_dlg = Xoa_app_.Usr_dlg();
+ this.db_mgr = wiki.Db_mgr_as_sql().Core_data_mgr();
+ Xob_search_sql_cmd.Dbs__get_or_make(db_mgr);
+ this.search_page_tbl = db_mgr.Db__search().Tbl__search_link();
+ this.search_word_tbl = db_mgr.Db__search().Tbl__search_word();
+ search_page_tbl.Insert_bgn(); search_word_tbl.Insert_bgn();
+ }
+ public void Sort_do(Io_line_rdr rdr) {
+ byte[] bry = rdr.Bfr();
+ byte[] cur_word = Bry_.Mid(bry, rdr.Key_pos_bgn(), rdr.Key_pos_end());
+ if (!Bry_.Eq(cur_word, prv_word)) {
+ search_word_tbl.Insert_cmd_by_batch(++search_id, cur_word);
+ prv_word = cur_word;
+ }
+ search_page_tbl.Insert_cmd_by_batch(search_id, Base85_utl.XtoIntByAry(bry, rdr.Key_pos_end() + 1, rdr.Key_pos_end() + 5)); // -1: ignore rdr_dlm
+ if (search_id % 10000 == 0)
+ usr_dlg.Prog_many("", "", "creating title index: count=~{0}", search_id);
+ }
+ public void Sort_end() {
+ search_page_tbl.Insert_end(); search_word_tbl.Insert_end();
+ Xowd_search_temp_tbl search_temp_tbl = new Xowd_search_temp_tbl(db_mgr.Db__search().Conn(), db_mgr.Props().Schema_is_1());
+ search_temp_tbl.Create_idx(usr_dlg, search_page_tbl, search_word_tbl);
+ }
+}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_sql.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_term_cmd.java
similarity index 50%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_sql.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_term_cmd.java
index 49f1c4113..caddb8256 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_sql.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_term_cmd.java
@@ -15,18 +15,18 @@ 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 .
*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.xowa.dbs.*;
-public class Xob_term_sql extends Xob_term_base {
- public Xob_term_sql(Xob_bldr bldr, Xowe_wiki wiki) {this.Ctor(bldr, wiki); this.wiki = wiki;} private Xowe_wiki wiki;
- @Override public String Cmd_key() {return KEY;} public static final String KEY = "import.sql.term";
+package gplx.xowa.bldrs.cmds.texts.sqls; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.bldrs.cmds.texts.*;
+import gplx.dbs.cfgs.*; import gplx.xowa.dbs.*; import gplx.xowa.wikis.*;
+public class Xob_term_cmd extends Xob_term_base {
+ public Xob_term_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Ctor(bldr, wiki); this.wiki = wiki;} private Xowe_wiki wiki;
+ @Override public String Cmd_key() {return KEY;} public static final String KEY = "text.term";
@Override public void Cmd_end_hook() {
Io_mgr._.DeleteDirDeep(wiki.Fsys_mgr().Tmp_dir());
- Xodb_mgr_sql db_mgr = wiki.Db_mgr_as_sql();
- db_mgr.Tbl_xowa_cfg().Insert_bry_as_str (Xodb_mgr_sql.Grp_wiki_init, "props.bldr_version", wiki.Props().Bldr_version());
- 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().Core_data_mgr().Rls();
+ Db_cfg_tbl cfg_tbl = wiki.Data_mgr__core_mgr().Tbl__cfg();
+ cfg_tbl.Insert_bry(Xow_cfg_consts.Grp_wiki_init, "props.bldr_version", wiki.Props().Bldr_version());
+ cfg_tbl.Insert_bry(Xow_cfg_consts.Grp_wiki_init, "props.main_page", wiki.Props().Main_page());
+ cfg_tbl.Insert_bry(Xow_cfg_consts.Grp_wiki_init, "props.siteinfo_misc", wiki.Props().Siteinfo_misc());
+ cfg_tbl.Insert_bry(Xow_cfg_consts.Grp_wiki_init, "props.siteinfo_mainpage", wiki.Props().Siteinfo_mainpage());
+ wiki.Data_mgr__core_mgr().Rls();
}
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_calc_stats.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_calc_stats_cmd.java
similarity index 83%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_calc_stats.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_calc_stats_cmd.java
index 7934614eb..8f26c6f79 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_calc_stats.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_calc_stats_cmd.java
@@ -15,16 +15,16 @@ 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 .
*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.xowa.bldrs.*; import gplx.xowa.tdbs.*;
-public class Xobc_core_calc_stats extends Xob_itm_basic_base implements Xob_cmd {
- public Xobc_core_calc_stats(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
- public String Cmd_key() {return KEY;} public static final String KEY = "core.calc_stats";
- public void Cmd_ini(Xob_bldr bldr) {}
+package gplx.xowa.bldrs.cmds.texts.tdbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.bldrs.cmds.texts.*;
+import gplx.xowa.tdbs.*; import gplx.xowa.wikis.data.tbls.*;
+public class Xob_calc_stats_cmd extends Xob_itm_basic_base implements Xob_cmd {
+ public Xob_calc_stats_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
+ public String Cmd_key() {return Xob_cmd_keys.Key_tdb_calc_stats;}
+ public void Cmd_init(Xob_bldr bldr) {}
public void Cmd_bgn(Xob_bldr bldr) {}
public void Cmd_run() {Exec();}
public void Cmd_end() {}
- public void Cmd_print() {}
+ public void Cmd_term() {}
private void Exec() {
int ns_len = wiki.Ns_mgr().Ords_len();
int total = 0;
@@ -45,7 +45,7 @@ public class Xobc_core_calc_stats extends Xob_itm_basic_base implements Xob_cmd
Xow_ns ns = wiki.Ns_mgr().Ords_ary()[i];
if (ns.Id() < 0) continue;
bfr.Add_byte_nl();
- Gen_call(Bool_.N, bfr, Xow_wiki_stats.Invk_number_of_articles_in_ns_, ns.Num_str(), Int_.Xto_str_pad_bgn(ns.Count(), 10));
+ Gen_call(Bool_.N, bfr, Xow_wiki_stats.Invk_number_of_articles_in_ns_, ns.Num_str(), Int_.Xto_str_pad_bgn_zero(ns.Count(), 10));
}
bfr.Add_byte_nl().Add_byte(Byte_ascii.Semic).Add_byte_nl();
Io_url wiki_gfs = Wiki_gfs_url(wiki);
@@ -98,11 +98,11 @@ public class Xobc_core_calc_stats extends Xob_itm_basic_base implements Xob_cmd
int rv = 0;
byte[] bry = Io_mgr._.LoadFilBry(fil);
Xob_xdat_file xdat_file = new Xob_xdat_file().Parse(bry, bry.length, fil);
- Xodb_page page = Xodb_page.new_tmp();
+ Xowd_page_itm page = Xowd_page_itm.new_tmp();
int count = xdat_file.Count();
for (int i = 0; i < count; i++) {
byte[] ttl_bry = xdat_file.Get_bry(i);
- Xodb_page_.Txt_ttl_load(page, ttl_bry);
+ Xotdb_page_itm_.Txt_ttl_load(page, ttl_bry);
rv += page.Redirected() ? 0 : 1;
}
return rv;
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_base_tst.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_init_base_tst.java
similarity index 87%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_base_tst.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_init_base_tst.java
index 4ac502b60..ed8793df5 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_base_tst.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_init_base_tst.java
@@ -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 .
*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+package gplx.xowa.bldrs.cmds.texts.tdbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.bldrs.cmds.texts.*;
import org.junit.*; import gplx.xowa.html.portal.*; import gplx.xowa.wikis.xwikis.*;
public class Xob_init_base_tst {
@Before public void init() {fxt.Clear();} private Xob_init_base_fxt fxt = new Xob_init_base_fxt();
@@ -26,7 +26,7 @@ public class Xob_init_base_tst {
Xow_xwiki_itm xwiki_itm = app.User().Wiki().Xwiki_mgr().Add_full("en.wikipedia.org", "en.wikipedia.org");
xwiki_itm.Offline_(Bool_.Y); // simulate add via Available_from_fsys; DATE:2014-09-21
Tfds.Eq("", wikis_list.Itms_as_html()); // still empty
- new Xob_init_txt(app.Bldr(), wiki).Cmd_end(); // mock "init" task
+ new Xob_init_tdb(app.Bldr(), wiki).Cmd_end(); // mock "init" task
Tfds.Eq("\n en.wikipedia.org", wikis_list.Itms_as_html()); // no longer empty
}
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_txt.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_init_tdb.java
similarity index 63%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_txt.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_init_tdb.java
index 1aabda2f6..17b8b7162 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_txt.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_init_tdb.java
@@ -15,14 +15,14 @@ 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 .
*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+package gplx.xowa.bldrs.cmds.texts.tdbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.bldrs.cmds.texts.*;
import gplx.xowa.xtns.wdatas.imports.*;
-public class Xob_init_txt extends Xob_init_base {
- public Xob_init_txt(Xob_bldr bldr, Xowe_wiki wiki) {this.Ctor(bldr, wiki);}
- @Override public String Cmd_key() {return KEY;} public static final String KEY = "core.init";
+public class Xob_init_tdb extends Xob_init_base {
+ public Xob_init_tdb(Xob_bldr bldr, Xowe_wiki wiki) {this.Ctor(bldr, wiki);}
+ @Override public String Cmd_key() {return Xob_cmd_keys.Key_tdb_text_init;}
@Override public void Cmd_ini_wdata(Xob_bldr bldr, Xowe_wiki wiki) {
- bldr.Cmd_mgr().Add_cmd(wiki, Xob_wdata_qid_txt.KEY);
- bldr.Cmd_mgr().Add_cmd(wiki, Xob_wdata_pid_txt.KEY);
+ bldr.Cmd_mgr().Add_cmd(wiki, Xob_cmd_keys.Key_tdb_text_wdata_qid);
+ bldr.Cmd_mgr().Add_cmd(wiki, Xob_cmd_keys.Key_tdb_text_wdata_pid);
}
@Override public void Cmd_run_end(Xowe_wiki wiki) {}
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_make_id.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_make_id_wkr.java
similarity index 72%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_make_id.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_make_id_wkr.java
index 671f4be2e..65747a365 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_make_id.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_make_id_wkr.java
@@ -15,19 +15,19 @@ 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 .
*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.ios.*; import gplx.xowa.tdbs.*;
-public class Xobc_core_make_id extends Xob_itm_dump_base implements Xobd_wkr, GfoInvkAble {
- public Xobc_core_make_id(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
+package gplx.xowa.bldrs.cmds.texts.tdbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.bldrs.cmds.texts.*;
+import gplx.ios.*; import gplx.xowa.tdbs.*; import gplx.xowa.wikis.data.tbls.*;
+public class Xob_make_id_wkr extends Xob_itm_dump_base implements Xobd_wkr, GfoInvkAble {
+ public Xob_make_id_wkr(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
public String Wkr_key() {return KEY;} public static final String KEY = "core.make_id";
public void Wkr_ini(Xob_bldr bldr) {}
public void Wkr_bgn(Xob_bldr bldr) {
this.Init_dump(KEY, wiki.Tdb_fsys_mgr().Site_dir().GenSubDir(Xotdb_dir_info_.Name_id));
}
- public void Wkr_run(Xodb_page page) {
+ public void Wkr_run(Xowd_page_itm page) {
byte[] ttl = page.Ttl_page_db();
if (dump_bfr.Len() + row_fixed_len + ttl.length > dump_fil_len) Io_mgr._.AppendFilBfr(dump_url_gen.Nxt_url(), dump_bfr);
- Xodb_page_.Txt_id_save(dump_bfr, page);
+ Xotdb_page_itm_.Txt_id_save(dump_bfr, page);
}
public void Wkr_end() {
this.Term_dump(new Xob_make_cmd_site(bldr.Usr_dlg(), make_dir, make_fil_len));
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_txt.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_page_txt.java
similarity index 80%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_txt.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_page_txt.java
index da04eedd1..87557755d 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_txt.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_page_txt.java
@@ -15,41 +15,41 @@ 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 .
*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.ios.*; import gplx.xowa.tdbs.*;
+package gplx.xowa.bldrs.cmds.texts.tdbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.bldrs.cmds.texts.*;
+import gplx.ios.*; import gplx.xowa.tdbs.*; import gplx.xowa.wikis.data.tbls.*;
public class Xob_page_txt extends Xob_itm_dump_base implements Xobd_wkr, GfoInvkAble {
public Xob_page_txt(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
- public String Wkr_key() {return KEY;} public static final String KEY = "core.make_page";
+ public String Wkr_key() {return Xob_cmd_keys.Key_tdb_make_page;}
public void Wkr_ini(Xob_bldr bldr) {}
public void Wkr_bgn(Xob_bldr bldr) {
redirect_mgr = wiki.Redirect_mgr(); page_storage_type = wiki.Appe().Setup_mgr().Dump_mgr().Data_storage_format();
fsys_mgr = wiki.Tdb_fsys_mgr();
make_dir = fsys_mgr.Ns_dir();
if (Io_mgr._.QueryDir_args(make_dir).DirOnly_().ExecAsUrlAry().length > 0) throw bldr.Usr_dlg().Fail_many("xowa.bldr.itm", "dir_empty", "dir_must_be_empty: ~{0}", make_dir.Raw());
- this.Init_dump(KEY, make_dir);
+ this.Init_dump(Xob_cmd_keys.Key_tdb_make_page, make_dir);
this.data_rpt_typ = stat_mgr.GetOrNew(Xotdb_dir_info_.Tid_page);
ttl_wtr_mgr = new Xob_tmp_wtr_mgr(new Xob_tmp_wtr_wkr__ttl(temp_dir, dump_fil_len));
} private Xotdb_fsys_mgr fsys_mgr; Xop_redirect_mgr redirect_mgr;
int page_file_len = 512 * Io_mgr.Len_kb, title_file_len = 64 * Io_mgr.Len_kb; Xob_tmp_wtr_mgr ttl_wtr_mgr;
Xob_xdat_file_wtr[] page_wtr_regy = new Xob_xdat_file_wtr[Ns_ordinal_max]; static final int Ns_ordinal_max = Xow_ns_mgr_.Ordinal_max; // ASSUME: no more than 128 ns in a wiki
Xob_stat_type data_rpt_typ; Xob_stat_mgr stat_mgr = new Xob_stat_mgr(); byte page_storage_type;
- public void Wkr_run(Xodb_page page) {
- int id = page.Id(); byte[] ttl_wo_ns = page.Ttl_page_db(), text = page.Wtxt(); int ttl_len = ttl_wo_ns.length, text_len = text.length; Xow_ns ns = page.Ns();
+ public void Wkr_run(Xowd_page_itm page) {
+ int id = page.Id(); byte[] ttl_wo_ns = page.Ttl_page_db(), text = page.Text(); int ttl_len = ttl_wo_ns.length, text_len = text.length; Xow_ns ns = page.Ns();
boolean redirect = redirect_mgr.Is_redirect(text, text_len);
page.Redirected_(redirect);
// page: EX: \t123\t2012-06-09\ttitle\ttext\n; NOTE: 512k * ~20 ns = 10 MB max memory; no need for intermediary flushing
Xob_xdat_file_wtr page_wtr = Page_wtr_get(ns);
- if (page_wtr.FlushNeeded(Xodb_page_.Txt_page_len__fixed + ttl_len + text_len)) page_wtr.Flush(bldr.Usr_dlg());
- Xodb_page_.Txt_page_save(page_wtr.Bfr(), id, page.Modified_on(), ttl_wo_ns, text, false);
+ if (page_wtr.FlushNeeded(Xotdb_page_itm_.Txt_page_len__fixed + ttl_len + text_len)) page_wtr.Flush(bldr.Usr_dlg());
+ Xotdb_page_itm_.Txt_page_save(page_wtr.Bfr(), id, page.Modified_on(), ttl_wo_ns, text, false);
page_wtr.Add_idx(Byte_ascii.NewLine);
// idx: EX: 00100|aB64|Ttl;
Xob_tmp_wtr ttl_wtr = ttl_wtr_mgr.Get_or_new(ns);
int file_idx = page_wtr.Fil_idx(), row_idx = page_wtr.Idx_pos() - ListAdp_.LastIdxOffset;
- page.Wtxt_db_id_(file_idx).Tdb_row_idx_(row_idx);
- if (ttl_wtr.FlushNeeded(Xodb_page_.Txt_ttl_len__fixed + ttl_len)) ttl_wtr.Flush(bldr.Usr_dlg());
- Xodb_page_.Txt_ttl_save(ttl_wtr.Bfr(), id, file_idx, row_idx, redirect, text_len, ttl_wo_ns);
+ page.Text_db_id_(file_idx).Tdb_row_idx_(row_idx);
+ if (ttl_wtr.FlushNeeded(Xotdb_page_itm_.Txt_ttl_len__fixed + ttl_len)) ttl_wtr.Flush(bldr.Usr_dlg());
+ Xotdb_page_itm_.Txt_ttl_save(ttl_wtr.Bfr(), id, file_idx, row_idx, redirect, text_len, ttl_wo_ns);
}
public void Wkr_end() {
Flush_page(page_wtr_regy);
diff --git a/400_xowa/src_210_bldr_core/gplx/xowa/Xobc_parse_dump_templates.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_parse_dump_templates_cmd.java
similarity index 66%
rename from 400_xowa/src_210_bldr_core/gplx/xowa/Xobc_parse_dump_templates.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_parse_dump_templates_cmd.java
index 767fce043..ecf7a1aa2 100644
--- a/400_xowa/src_210_bldr_core/gplx/xowa/Xobc_parse_dump_templates.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_parse_dump_templates_cmd.java
@@ -15,21 +15,21 @@ 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 .
*/
-package gplx.xowa; import gplx.*;
-import gplx.ios.*;
-public class Xobc_parse_dump_templates extends Xob_itm_dump_base implements Xobd_wkr, GfoInvkAble {
- public Xobc_parse_dump_templates(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
+package gplx.xowa.bldrs.cmds.texts.tdbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.bldrs.cmds.texts.*;
+import gplx.ios.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.tdbs.*;
+public class Xob_parse_dump_templates_cmd extends Xob_itm_dump_base implements Xobd_wkr, GfoInvkAble {
+ public Xob_parse_dump_templates_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
public String Wkr_key() {return KEY;} public static final String KEY = "parse.dump_templates";
public static final int FixedLen_page = 1 + 5 + 1 + 5 + 1 + 1 + 1; // \tid|date|title|text\n
public void Wkr_ini(Xob_bldr bldr) {}
public void Wkr_bgn(Xob_bldr bldr) {
Init_dump(KEY);
}
- public void Wkr_run(Xodb_page page) {
+ public void Wkr_run(Xowd_page_itm page) {
if (page.Ns_id() != Xow_ns_.Id_template) return;
- int id = page.Id(); byte[] title = page.Ttl_page_db(), text = page.Wtxt(); int title_len = title.length, text_len = text.length;
+ int id = page.Id(); byte[] title = page.Ttl_page_db(), text = page.Text(); int title_len = title.length, text_len = text.length;
if (FixedLen_page + title_len + text_len + dump_bfr.Len() > dump_fil_len) super.Flush_dump();
- Xodb_page_.Txt_page_save(dump_bfr, id, page.Modified_on(), title, text, true);
+ Xotdb_page_itm_.Txt_page_save(dump_bfr, id, page.Modified_on(), title, text, true);
}
public void Wkr_end() {super.Flush_dump();}
public void Wkr_print() {}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_base_tst.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_search_base_tst.java
similarity index 84%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_base_tst.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_search_base_tst.java
index e8895b172..5285c64cf 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_base_tst.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_search_base_tst.java
@@ -15,8 +15,8 @@ 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 .
*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import org.junit.*; import gplx.xowa.tdbs.*;
+package gplx.xowa.bldrs.cmds.texts.tdbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.bldrs.cmds.texts.*;
+import org.junit.*; import gplx.xowa.tdbs.*; import gplx.xowa.bldrs.*;
public class Xob_search_base_tst {
@Test public void Split() {
tst_Split("a", "a");
@@ -42,7 +42,7 @@ public class Xob_search_base_tst {
, "0|a|b|2"
, ""
)
- .Run(new Xob_search_txt(fxt.Bldr(), this.fxt.Wiki()))
+ .Run(new Xob_search_tdb(fxt.Bldr(), this.fxt.Wiki()))
;
} private Xob_fxt fxt = new Xob_fxt().Ctor_mem();
private void tst_Split(String raw, String... expd) {
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_txt.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_search_tdb.java
similarity index 69%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_txt.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_search_tdb.java
index 1d09469a4..1e76d2692 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_txt.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_search_tdb.java
@@ -15,10 +15,10 @@ 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 .
*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-public class Xob_search_txt extends Xob_search_base {
- public Xob_search_txt(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
- @Override public String Wkr_key() {return KEY;} public static final String KEY = "core.make_search_title";
+package gplx.xowa.bldrs.cmds.texts.tdbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.bldrs.cmds.texts.*;
+public class Xob_search_tdb extends Xob_search_base {
+ public Xob_search_tdb(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
+ @Override public String Wkr_key() {return Xob_cmd_keys.Key_tdb_make_search_title;}
@Override public gplx.ios.Io_make_cmd Make_cmd_site() {
return new Xob_make_cmd_site(bldr.Usr_dlg(), this.make_dir, this.make_fil_len);
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_txt.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_term_txt.java
similarity index 77%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_txt.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_term_txt.java
index 8d9ae42db..5aedd2aa0 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_txt.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_term_txt.java
@@ -15,10 +15,11 @@ 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 .
*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+package gplx.xowa.bldrs.cmds.texts.tdbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.bldrs.cmds.texts.*;
+import gplx.xowa.bldrs.cmds.texts.*;
public class Xob_term_txt extends Xob_term_base {
public Xob_term_txt(Xob_bldr bldr, Xowe_wiki wiki) {this.Ctor(bldr, wiki); this.wiki = wiki;} private Xowe_wiki wiki;
- @Override public String Cmd_key() {return KEY;} public static final String KEY = "core.term";
+ @Override public String Cmd_key() {return Xob_cmd_keys.Key_tdb_core_term;}
@Override public void Cmd_end_hook() {
Io_mgr._.SaveFilBry(wiki.Tdb_fsys_mgr().Cfg_wiki_core_fil(), wiki.Cfg_wiki_core().Build_gfs());
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_tst.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_tst.java
similarity index 89%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/Xobc_tst.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_tst.java
index 12ce0e22e..ae1b8d431 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_tst.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/tdbs/Xob_tst.java
@@ -15,10 +15,10 @@ 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 .
*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+package gplx.xowa.bldrs.cmds.texts.tdbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.bldrs.cmds.texts.*;
import org.junit.*;
-import gplx.ios.*; import gplx.xowa.tdbs.*;
-public class Xobc_tst {
+import gplx.ios.*; import gplx.xowa.tdbs.*; import gplx.xowa.wikis.data.tbls.*;
+public class Xob_tst {
@Before public void init() {fxt = new Xob_fxt().Ctor_mem();} private Xob_fxt fxt;
// @After public void term() {fxt.Wiki().Ctx().Sys_load_tmpls_(true);} // commented during wiki.Ctx() removal; DATE:2014-04-22
@Test public void Basic() {
@@ -172,13 +172,13 @@ public class Xobc_tst {
Xoae_app app = Xoa_app_fxt.app_(); // NOTE: resets mem file system, so must happen first
Io_url url = Io_url_.mem_fil_("mem/raw_page.csv");
Io_mgr._.SaveFilStr(url, raw);
- Xodb_page_raw_parser parser = new Xodb_page_raw_parser();
+ Xotdb_page_raw_parser parser = new Xotdb_page_raw_parser();
Xowe_wiki wiki = Xoa_app_fxt.wiki_tst_(app);
parser.Load(Gfo_usr_dlg_base.test_(), wiki, new Xow_ns(Xow_ns_.Id_template, Xow_ns_case_.Id_1st, Bry_.new_utf8_("Template"), false), new Io_url[] {url}, 1 * Io_mgr.Len_kb);
ListAdp actl = ListAdp_.new_();
- Xodb_page page = new Xodb_page();
+ Xowd_page_itm page = new Xowd_page_itm();
while (parser.Read(page)) {
- actl.Add(String_.new_utf8_(page.Wtxt()));
+ actl.Add(String_.new_utf8_(page.Text()));
}
Tfds.Eq_ary(expd, actl.XtoStrAry());
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_cleanup.java b/400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_cleanup_cmd.java
similarity index 65%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_cleanup.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_cleanup_cmd.java
index fde74871a..de5cd184b 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_cleanup.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_cleanup_cmd.java
@@ -15,18 +15,17 @@ 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 .
*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.xowa.bldrs.*;
+package gplx.xowa.bldrs.cmds.utils; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
import gplx.core.criterias.*;
-public class Xobc_core_cleanup extends Xob_itm_basic_base implements Xob_cmd {
+public class Xob_cleanup_cmd extends Xob_itm_basic_base implements Xob_cmd {
private String bz2_cmd;
private boolean delete_all, delete_tmp;
private Criteria_ioMatch[] delete_by_match_ary;
- public Xobc_core_cleanup(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
- public String Cmd_key() {return KEY;} public static final String KEY = "core.cleanup";
- public Xobc_core_cleanup Delete_sqlite3_(boolean v){delete_sqlite3 = v; return this;} private boolean delete_sqlite3;
- public Xobc_core_cleanup Delete_xml_(boolean v) {delete_xml = v; return this;} private boolean delete_xml;
- public Xobc_core_cleanup Delete_wiki_(boolean v) {delete_wiki = v; return this;} private boolean delete_wiki;
+ public Xob_cleanup_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
+ public String Cmd_key() {return Xob_cmd_keys.Key_util_cleanup;}
+ public Xob_cleanup_cmd Delete_sqlite3_(boolean v){delete_sqlite3 = v; return this;} private boolean delete_sqlite3;
+ public Xob_cleanup_cmd Delete_xml_(boolean v) {delete_xml = v; return this;} private boolean delete_xml;
+ public Xob_cleanup_cmd Delete_tdb_(boolean v) {delete_tdb = v; return this;} private boolean delete_tdb;
public void Bz2_fil_(Io_url v) {bz2_fil = v;} private Io_url bz2_fil;
public void Cmd_run() {
Io_url wiki_root_dir = wiki.Fsys_mgr().Root_dir();
@@ -37,27 +36,27 @@ public class Xobc_core_cleanup extends Xob_itm_basic_base implements Xob_cmd {
Io_mgr._.MoveFil(bz2_fil, bz2_fil.OwnerDir().OwnerDir().GenSubFil_nest("done", bz2_fil.NameAndExt()));
}
if (delete_xml) Io_mgr._.DeleteFil(Xobd_rdr.Find_fil_by(wiki_root_dir, "*.xml"));
- if (delete_wiki) {
- usr_dlg.Note_many("", "delete_wiki", "deleting wiki");
- Delete_wiki_txt(wiki_root_dir);
+ if (delete_tdb) {
+ usr_dlg.Note_many("", "", "bldr.wiki:deleting tdb wiki");
+ Delete_tdb(wiki_root_dir);
}
if (delete_sqlite3)
Delete_wiki_sql(wiki);
if (delete_all)
- Io_mgr._.DeleteDirDeep(wiki_root_dir);
+ Io_mgr._.DeleteDir_cmd(wiki_root_dir).Exec(); // do not delete subdirs; needed to support "/prv" for fsdb; DATE:2015-04-01
if (delete_by_match_ary != null)
Delete_by_match(wiki_root_dir, delete_by_match_ary);
if (delete_tmp)
Io_mgr._.DeleteDirDeep(wiki_root_dir.GenSubDir("tmp"));
}
- public void Cmd_ini(Xob_bldr bldr) {}
+ public void Cmd_init(Xob_bldr bldr) {}
public void Cmd_bgn(Xob_bldr bldr) {}
public void Cmd_end() {}
- public void Cmd_print() {}
+ public void Cmd_term() {}
@Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_bz2_cmd_)) bz2_cmd = m.ReadStr("v");
else if (ctx.Match(k, Invk_delete_xml_)) delete_xml = m.ReadYn("v");
- else if (ctx.Match(k, Invk_delete_wiki_)) delete_wiki = m.ReadYn("v");
+ else if (ctx.Match(k, Invk_delete_wiki_)) delete_tdb = m.ReadYn("v");
else if (ctx.Match(k, Invk_delete_sqlite3_)) delete_sqlite3 = m.ReadYn("v");
else if (ctx.Match(k, Invk_delete_all_)) delete_all = m.ReadYn("v");
else if (ctx.Match(k, Invk_bz2_fil_)) bz2_fil = m.ReadIoUrl("v");
@@ -97,20 +96,35 @@ public class Xobc_core_cleanup extends Xob_itm_basic_base implements Xob_cmd {
}
}
}
- private static void Delete_wiki_txt(Io_url wiki_root_dir) {
+ private static void Delete_tdb(Io_url wiki_root_dir) {
Io_url[] dirs = Io_mgr._.QueryDir_args(wiki_root_dir).DirOnly_().DirInclude_().ExecAsUrlAry();
int dirs_len = dirs.length;
- for (int i = 0; i < dirs_len; i++)
- Io_mgr._.DeleteDirDeep(dirs[i]);
+ for (int i = 0; i < dirs_len; i++) {
+ Io_url dir = dirs[i];
+ if (gplx.xowa.tdbs.Xotdb_dir_info_.Dir_name_is_tdb(dir.NameOnly()))
+ Io_mgr._.DeleteDirDeep(dir);
+ }
}
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().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());
- for (int i = 0; i < sqlite3_files_len; i++)
- Io_mgr._.DeleteFil(sqlite3_files[i]);
+ Io_url[] files = Io_mgr._.QueryDir_fils(wiki_root_dir);
+ int files_len = files.length;
+ int deleted = 0;
+ String file_prefix = wiki.Domain_str() + "-file"; // NOTE: skip anything with "-file"; EX: "en.wikipedia.org-file.xowa"
+ String html_prefix = wiki.Domain_str() + "-html"; // NOTE: skip anything with "-html"; EX: "en.wikipedia.org-html-ns.000-db.002.xowa"
+ for (int i = 0; i < files_len; i++) {
+ Io_url url = files[i];
+ if ( !String_.Eq(url.Ext(), ".xowa")
+ && !String_.Eq(url.Ext(), ".sqlite3"))
+ continue;
+ if ( String_.HasAtBgn(url.NameAndExt(), file_prefix)
+ || String_.HasAtBgn(url.NameAndExt(), html_prefix)
+ ) continue; // skip
+ Io_mgr._.DeleteFil(url);
+ deleted++;
+ }
+ usr_dlg.Note_many("", "delete_wiki", "deleting sqlite3 files: ~{0} ~{1}", deleted, wiki_root_dir.Raw());
}
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_batch.java b/400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_core_batch_utl.java
similarity index 78%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_batch.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_core_batch_utl.java
index ca9e79269..d6fbb6494 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_batch.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_core_batch_utl.java
@@ -15,10 +15,10 @@ 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 .
*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+package gplx.xowa.bldrs.cmds.utils; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
import gplx.xowa.wikis.*;
-public class Xobc_core_batch implements GfoInvkAble {
- public Xobc_core_batch(Xob_bldr bldr, byte[] raw) {this.bldr = bldr; fmtr.Fmt_(raw);} private Xob_bldr bldr;
+public class Xob_core_batch_utl implements GfoInvkAble {
+ public Xob_core_batch_utl(Xob_bldr bldr, byte[] raw) {this.bldr = bldr; fmtr.Fmt_(raw);} private Xob_bldr bldr;
Bry_fmtr fmtr = Bry_fmtr.keys_("bz2_fil", "wiki_key");
private void Run() {
Io_url[] bz2_fils = Io_mgr._.QueryDir_fils(bldr.App().Fsys_mgr().Wiki_dir().GenSubDir_nest(Dir_dump, "todo"));
@@ -29,7 +29,7 @@ public class Xobc_core_batch implements GfoInvkAble {
Io_url bz2_fil_url = bz2_fils[i];
bz2_fil.Fil_(bz2_fil_url).Parse(bz2_fil_url.NameOnly());
fmtr.Bld_bfr_many(bfr, bz2_fil_url.Raw(), bz2_fil.Domain());
- bldr.Usr_dlg().Note_many(GRP_KEY, "bgn", "starting script for ~{0}", String_.new_utf8_(bz2_fil.Domain()));
+ bldr.Usr_dlg().Note_many("", "", "starting script for ~{0}", String_.new_utf8_(bz2_fil.Domain()));
bldr.App().Gfs_mgr().Run_str(bfr.Xto_str_and_clear());
}
}
@@ -39,5 +39,4 @@ public class Xobc_core_batch implements GfoInvkAble {
return this;
} private static final String Invk_owner = "owner", Invk_run = "run";
public static String Dir_dump = "#dump";
- static final String GRP_KEY = "xowa.bldr.cmd.batch";
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_decompress_bz.java b/400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_decompress_bz2_cmd.java
similarity index 82%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_decompress_bz.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_decompress_bz2_cmd.java
index 49a0667ea..697514b32 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_decompress_bz.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_decompress_bz2_cmd.java
@@ -15,12 +15,12 @@ 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 .
*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+package gplx.xowa.bldrs.cmds.utils; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
import gplx.ios.*; import gplx.threads.*; import gplx.xowa.bldrs.*;
-public class Xobc_core_decompress_bz extends Xob_itm_basic_base implements Xob_cmd {
- public Xobc_core_decompress_bz(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
- public String Cmd_key() {return KEY;} public static final String KEY = "core.decompress_bz2";
- public void Cmd_ini(Xob_bldr bldr) {}
+public class Xob_decompress_bz2_cmd extends Xob_itm_basic_base implements Xob_cmd {
+ public Xob_decompress_bz2_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
+ public String Cmd_key() {return Xob_cmd_keys.Key_decompress_bz2;}
+ public void Cmd_init(Xob_bldr bldr) {}
public void Cmd_bgn(Xob_bldr bldr) {}
public void Cmd_run() {
if (Io_mgr._.ExistsFil(trg)) return; // file already exists; don't decompress again
@@ -28,7 +28,7 @@ public class Xobc_core_decompress_bz extends Xob_itm_basic_base implements Xob_c
Decompress(bldr.App(), src.Raw(), trg);
}
public void Cmd_end() {}
- public void Cmd_print() {}
+ public void Cmd_term() {}
@Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_src_)) this.Src_(m.ReadIoUrl("v"));
else return super.Invk(ctx, ikey, k, m);
diff --git a/400_xowa/src_210_bldr_core/gplx/xowa/Xobc_deploy_copy.java b/400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_deploy_copy_cmd.java
similarity index 81%
rename from 400_xowa/src_210_bldr_core/gplx/xowa/Xobc_deploy_copy.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_deploy_copy_cmd.java
index 00ca45ac1..c8c5c62d7 100644
--- a/400_xowa/src_210_bldr_core/gplx/xowa/Xobc_deploy_copy.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_deploy_copy_cmd.java
@@ -15,12 +15,12 @@ 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 .
*/
-package gplx.xowa; import gplx.*;
+package gplx.xowa.bldrs.cmds.utils; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
import gplx.xowa.bldrs.*; import gplx.xowa.tdbs.*;
-public class Xobc_deploy_copy extends Xob_itm_basic_base implements Xob_cmd, GfoInvkAble {
- public Xobc_deploy_copy(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
- public String Cmd_key() {return KEY;} public static final String KEY = "deploy.copy";
- public void Cmd_ini(Xob_bldr bldr) {}
+public class Xob_deploy_copy_cmd extends Xob_itm_basic_base implements Xob_cmd, GfoInvkAble {
+ public Xob_deploy_copy_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
+ public String Cmd_key() {return Xob_cmd_keys.Key_deploy_copy;}
+ public void Cmd_init(Xob_bldr bldr) {}
public void Cmd_bgn(Xob_bldr bldr) {}
public void Cmd_end() {}
public void Cmd_run() {
@@ -33,7 +33,7 @@ public class Xobc_deploy_copy extends Xob_itm_basic_base implements Xob_cmd, Gfo
Copy_dir_root(src_root_dir, Xotdb_dir_info_.Name_site, Xotdb_dir_info_.Name_id);
Copy_dir_root(src_root_dir, Xotdb_dir_info_.Name_site, Xotdb_dir_info_.Name_search_ttl);
}
- public void Cmd_print() {}
+ public void Cmd_term() {}
private void Copy_dir_ns(Io_url root, String name) {
Io_url[] ns_dirs = Io_mgr._.QueryDir_args(root).DirOnly_().ExecAsUrlAry();
for (int i = 0; i < ns_dirs.length; i++) {
@@ -41,10 +41,10 @@ public class Xobc_deploy_copy extends Xob_itm_basic_base implements Xob_cmd, Gfo
Io_url src_sub_dir = ns_dir.GenSubDir(name);
String dir_name = name;
if (zip) {
- Io_url src_zip_dir = ns_dir.GenSubDir(name + Xobc_deploy_zip.Dir_zip_suffix);
+ Io_url src_zip_dir = ns_dir.GenSubDir(name + Xob_deploy_zip_cmd.Dir_zip_suffix);
if (Io_mgr._.ExistsDir(src_zip_dir)) {
src_sub_dir = src_zip_dir;
- dir_name = name + Xobc_deploy_zip.Dir_zip_suffix;
+ dir_name = name + Xob_deploy_zip_cmd.Dir_zip_suffix;
}
}
Copy_dir(src_sub_dir, trg_root_dir.GenSubDir_nest(Xotdb_dir_info_.Name_ns, ns_dir.NameOnly(), dir_name));
diff --git a/400_xowa/src_210_bldr_core/gplx/xowa/Xobc_deploy_zip.java b/400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_deploy_zip_cmd.java
similarity index 81%
rename from 400_xowa/src_210_bldr_core/gplx/xowa/Xobc_deploy_zip.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_deploy_zip_cmd.java
index 67ad97c36..4847776d8 100644
--- a/400_xowa/src_210_bldr_core/gplx/xowa/Xobc_deploy_zip.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_deploy_zip_cmd.java
@@ -15,16 +15,16 @@ 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 .
*/
-package gplx.xowa; import gplx.*;
+package gplx.xowa.bldrs.cmds.utils; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
import gplx.xowa.bldrs.*; import gplx.xowa.tdbs.*;
-public class Xobc_deploy_zip extends Xob_itm_basic_base implements Xob_cmd {
- public Xobc_deploy_zip(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
- public String Cmd_key() {return KEY;} public static final String KEY = "deploy.zip";
- public void Cmd_ini(Xob_bldr bldr) {}
+public class Xob_deploy_zip_cmd extends Xob_itm_basic_base implements Xob_cmd {
+ public Xob_deploy_zip_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
+ public String Cmd_key() {return Xob_cmd_keys.Key_deploy_zip;}
+ public void Cmd_init(Xob_bldr bldr) {}
public void Cmd_bgn(Xob_bldr bldr) {}
public void Cmd_run() {Exec(bldr, Xotdb_dir_info_.Name_page);}
public void Cmd_end() {}
- public void Cmd_print() {}
+ public void Cmd_term() {}
private void Exec(Xob_bldr bldr, String type_name) {
Log("initing wiki");
try {wiki.Init_assert();}
@@ -42,10 +42,10 @@ public class Xobc_deploy_zip extends Xob_itm_basic_base implements Xob_cmd {
bldr.Usr_dlg().Prog_one(GRP_KEY, "scan", "scanning dir ~{0}", type_name);
Io_url[] fils = Io_mgr._.QueryDir_args(root_dir.GenSubDir(type_name)).Recur_().ExecAsUrlAry();
int fils_len = fils.length;
- String fils_len_str = Int_.Xto_str_pad_bgn(fils_len, 6);
+ String fils_len_str = Int_.Xto_str_pad_bgn_zero(fils_len, 6);
for (int i = 0; i < fils_len; i++) {
Io_url fil = fils[i];
- bldr.StatusMgr_prog_fmt(i, fils.length, -1, "zipping ~{0} ~{1} ~{2} of ~{3}", type_name, ns_name, Int_.Xto_str_pad_bgn(i, 6), fils_len_str);
+ bldr.Print_prog_msg(i, fils.length, -1, "zipping ~{0} ~{1} ~{2} of ~{3}", type_name, ns_name, Int_.Xto_str_pad_bgn_zero(i, 6), fils_len_str);
Io_url trg_fil = Gen_trg(root_dir, fil, type_name);
if (String_.Eq(fil.NameAndExt(), Xotdb_dir_info_.Name_reg_fil)) // do not zip reg.csv
Io_mgr._.CopyFil(fil, trg_fil, true);
@@ -54,7 +54,7 @@ public class Xobc_deploy_zip extends Xob_itm_basic_base implements Xob_cmd {
}
if (delete_dirs_page) Io_mgr._.DeleteDirDeep(root_dir.GenSubDir(type_name));
}
- public boolean Delete_dirs_page() {return delete_dirs_page;} public Xobc_deploy_zip Delete_dirs_page_(boolean v) {delete_dirs_page = v; return this;} private boolean delete_dirs_page = true;
+ public boolean Delete_dirs_page() {return delete_dirs_page;} public Xob_deploy_zip_cmd Delete_dirs_page_(boolean v) {delete_dirs_page = v; return this;} private boolean delete_dirs_page = true;
Io_url Gen_trg(Io_url root_dir, Io_url fil, String type_name) {
String src_fil = fil.Xto_api();
int pos = String_.FindBwd(src_fil, type_name); // SEE:NOTE_1
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_download_wkr.java b/400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_download_wkr.java
similarity index 89%
rename from 400_xowa/src/gplx/xowa/bldrs/files/Xob_download_wkr.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_download_wkr.java
index e3f3eb912..12adb34c2 100644
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_download_wkr.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_download_wkr.java
@@ -15,8 +15,8 @@ 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 .
*/
-package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.dbs.*; import gplx.ios.*;
+package gplx.xowa.bldrs.cmds.utils; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*; import gplx.ios.*; import gplx.xowa.bldrs.*;
public class Xob_download_wkr extends Xob_itm_basic_base implements Xob_cmd {
private String dump_date = "latest";
private String dump_type = null;
@@ -24,8 +24,8 @@ public class Xob_download_wkr extends Xob_itm_basic_base implements Xob_cmd {
private Io_url dump_trg_zip = null, dump_trg_bin = null;
private boolean unzip = true;
public Xob_download_wkr(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
- public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.download";
- public void Cmd_ini(Xob_bldr bldr) {}
+ public String Cmd_key() {return Xob_cmd_keys.Key_util_download;}
+ public void Cmd_init(Xob_bldr bldr) {}
public void Cmd_bgn(Xob_bldr bldr) {
if (dump_type == null) throw Err_.new_("dump_type must be specified");
Xob_dump_file dump_file = Xob_dump_file.new_(wiki.Domain_str(), dump_date, dump_type);
@@ -51,7 +51,7 @@ public class Xob_download_wkr extends Xob_itm_basic_base implements Xob_cmd {
}
}
public void Cmd_end() {}
- public void Cmd_print() {}
+ public void Cmd_term() {}
@Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (String_.Eq(k, Invk_dump_date_)) dump_date = m.ReadStr("v");
else if (String_.Eq(k, Invk_dump_type_)) dump_type = m.ReadStr("v");
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_cmd_exec_sql.java b/400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_exec_sql_cmd.java
similarity index 74%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/Xob_cmd_exec_sql.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_exec_sql_cmd.java
index 851609f3c..b9159b325 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_cmd_exec_sql.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_exec_sql_cmd.java
@@ -15,25 +15,25 @@ 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 .
*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+package gplx.xowa.bldrs.cmds.utils; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
import gplx.xowa.wikis.data.*; import gplx.xowa.dbs.*;
-public class Xob_cmd_exec_sql implements Xob_cmd {
+public class Xob_exec_sql_cmd 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;}
- public String Cmd_key() {return KEY;} public static final String KEY = "import.sql.exec_sql";
- public void Cmd_ini(Xob_bldr bldr) {}
- public void Cmd_bgn(Xob_bldr bldr) {
+ public Xob_exec_sql_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.wiki = wiki;}
+ public String Cmd_key() {return Xob_cmd_keys.Key_exec_sql;}
+ public void Cmd_run() {
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();
- Xowe_core_data_mgr fsys_mgr = db_mgr.Core_data_mgr();
+ Xowd_db_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);
}
- public void Cmd_run() {}
+ public void Cmd_init(Xob_bldr bldr) {}
+ public void Cmd_bgn(Xob_bldr bldr) {}
public void Cmd_end() {}
- public void Cmd_print() {}
+ public void Cmd_term() {}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_file_idx_)) file_idx = m.ReadInt("v");
else if (ctx.Match(k, Invk_sql_)) sql = m.ReadStr("v");
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_unzip_wkr.java b/400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_unzip_wkr.java
similarity index 93%
rename from 400_xowa/src/gplx/xowa/bldrs/files/Xob_unzip_wkr.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_unzip_wkr.java
index dec2da665..6540f33f7 100644
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_unzip_wkr.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_unzip_wkr.java
@@ -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 .
*/
-package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+package gplx.xowa.bldrs.cmds.utils; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
public class Xob_unzip_wkr {
private ProcessAdp decompress_bz2, decompress_zip, decompress_gz, process;
public int Process_exit_code() {return process.Exit_code();}
diff --git a/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_wiki_image_sql.java b/400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_image_cmd.java
similarity index 81%
rename from 400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_wiki_image_sql.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_image_cmd.java
index 7c519a6e1..0c95d7a92 100644
--- a/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_wiki_image_sql.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_image_cmd.java
@@ -15,37 +15,37 @@ 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 .
*/
-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.xowa.files.*;
-public class Xob_wiki_image_sql extends Xob_itm_dump_base implements Xob_cmd, GfoInvkAble, Sql_file_parser_cmd {
+package gplx.xowa.bldrs.cmds.wikis; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*; import gplx.ios.*; import gplx.xowa.files.*;
+public class Xob_image_cmd 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();
+ private Xob_image_tbl tbl_image = new Xob_image_tbl();
private byte[] cur_ttl, cur_media_type, cur_minor_mime, cur_timestamp; private int cur_size, cur_width, cur_height, cur_bits, cur_ext_id;
private int commit_count = 10000;
- public Xob_wiki_image_sql(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
- public String Cmd_key() {return KEY;} public static final String KEY = "wiki.image";
- public Io_url Src_fil() {return src_fil;} public Xob_wiki_image_sql Src_fil_(Io_url v) {src_fil = v; return this;} private Io_url src_fil;
+ public Xob_image_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
+ public String Cmd_key() {return Xob_cmd_keys.Key_wiki_image;}
+ public Io_url Src_fil() {return src_fil;} public Xob_image_cmd Src_fil_(Io_url v) {src_fil = v; return this;} private Io_url src_fil;
public Sql_file_parser Parser() {return parser;} private Sql_file_parser parser = new Sql_file_parser();
- public void Cmd_ini(Xob_bldr bldr) {}
+ public void Cmd_init(Xob_bldr bldr) {}
public void Cmd_bgn(Xob_bldr bldr) {
wiki.Init_assert(); // NOTE: must init wiki for db_mgr_as_sql
- this.Init_dump(KEY);
+ Init_dump(Xob_cmd_keys.Key_wiki_image);
if (src_fil == null) {
src_fil = Xobd_rdr.Find_fil_by(wiki.Fsys_mgr().Root_dir(), "*-image.sql");
if (src_fil == null) throw Err_mgr._.fmt_(Xob_cmd_mgr.GRP_KEY, "sql_file_missing", ".sql file not found in dir: ~{0}", wiki.Fsys_mgr().Root_dir());
}
parser.Src_fil_(src_fil).Trg_fil_gen_(dump_url_gen).Fld_cmd_(this).Flds_req_idx_(20, Fld_img_name, Fld_img_size, Fld_img_width, Fld_img_height, Fld_img_bits, Fld_img_media_type, Fld_img_minor_mime, Fld_img_timestamp);
- conn = Xodb_db_file.init__wiki_image(wiki.Fsys_mgr().Root_dir()).Conn();
- conn.Txn_mgr().Txn_bgn_if_none();
- tbl_image = new Xob_wiki_image_tbl();
+ this.conn = Xob_db_file.new__wiki_image(wiki.Fsys_mgr().Root_dir()).Conn();
+ conn.Txn_bgn();
+ this.tbl_image = new Xob_image_tbl();
tbl_image.Create_table(conn);
- stmt = tbl_image.Insert_stmt(conn);
+ this.stmt = tbl_image.Insert_stmt(conn);
}
public void Cmd_run() {
parser.Parse(bldr.Usr_dlg());
tbl_image.Create_index(conn);
- conn.Txn_mgr().Txn_end_all();
+ conn.Txn_end();
}
public void Exec(byte[] src, byte[] fld_key, int fld_idx, int fld_bgn, int fld_end, Bry_bfr file_bfr, Sql_file_parser_data data) {
switch (fld_idx) {
@@ -62,13 +62,13 @@ public class Xob_wiki_image_sql extends Xob_itm_dump_base implements Xob_cmd, Gf
++commit_count;
if ((commit_count % 10000) == 0) {
usr_dlg.Prog_many("", "", "committing: count=~{0} last=~{1}", commit_count, String_.new_utf8_(cur_ttl));
- conn.Txn_mgr().Txn_end_all_bgn_if_none();
+ conn.Txn_sav();
}
break;
}
}
public void Cmd_end() {}
- public void Cmd_print() {}
+ public void Cmd_term() {}
private boolean show_issues = true;
private static final int Fld_img_name = 0, Fld_img_size = 1, Fld_img_width = 2, Fld_img_height = 3, Fld_img_bits = 5, Fld_img_media_type = 6, Fld_img_minor_mime = 8, Fld_img_timestamp = 12;
@Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
diff --git a/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_image_ext_calc_tst.java b/400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_image_cmd_tst.java
similarity index 60%
rename from 400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_image_ext_calc_tst.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_image_cmd_tst.java
index 2865f10d3..4b24acb7d 100644
--- a/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_image_ext_calc_tst.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_image_cmd_tst.java
@@ -15,22 +15,22 @@ 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 .
*/
-package gplx.xowa.bldrs.wikis.images; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wikis.*;
+package gplx.xowa.bldrs.cmds.wikis; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
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();
+public class Xob_image_cmd_tst {
+ private Xob_image_cmd_fxt fxt = new Xob_image_cmd_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
@Test public void Ogg_VIDEO() {fxt.Init_("A.ogg" , Xof_media_type.Name_video , Xof_ext_.Bry_ogg, 220, 110) .Test(Xof_ext_.Id_ogv);} // A.ogg and VIDEO -> ogv
@Test public void Ogg_VIDEO_null_size() {fxt.Init_("A.ogg" , Xof_media_type.Name_video , Xof_ext_.Bry_ogg, 0, 0) .Test(Xof_ext_.Id_ogg);} // A.ogg but 0,0 -> ogg (not ogv)
@Test public void Png_is_jpg() {fxt.Init_("A.png" , Xof_media_type.Name_bitmap , Xof_ext_.Bry_jpg, 220, 110) .Test(Xof_ext_.Id_jpg);} // A.png and jpg -> jpg
@Test public void Jpeg_is_jpeg() {fxt.Init_("A.jpeg" , Xof_media_type.Name_bitmap , Xof_ext_.Bry_jpg, 220, 110) .Test(Xof_ext_.Id_jpeg);} // A.jpeg and jpg -> jpeg (unchanged)
}
-class Xob_image_ext_calc_fxt {
+class Xob_image_cmd_fxt {
private byte[] name, media_type, minor_mime; int w, h;
- public Xob_image_ext_calc_fxt Init_png() {Name_("A.png").Media_type_(Xof_media_type.Name_bitmap).Minor_mime_(Xof_ext_.Bry_png).W_(220).H_(110);
+ public Xob_image_cmd_fxt Init_png() {Name_("A.png").Media_type_(Xof_media_type.Name_bitmap).Minor_mime_(Xof_ext_.Bry_png).W_(220).H_(110);
return this;
}
- public Xob_image_ext_calc_fxt Init_(String name, String media_type, byte[] minor_mime, int w, int h) {
+ public Xob_image_cmd_fxt Init_(String name, String media_type, byte[] minor_mime, int w, int h) {
Name_(name);
Media_type_(media_type);
Minor_mime_(minor_mime);
@@ -38,14 +38,14 @@ class Xob_image_ext_calc_fxt {
H_(h);
return this;
}
- public Xob_image_ext_calc_fxt Name_(String v) {name = Bry_.new_ascii_(v); return this;}
- public Xob_image_ext_calc_fxt Media_type_(String v) {media_type = Bry_.new_ascii_(v); return this;}
- public Xob_image_ext_calc_fxt Minor_mime_(byte[] v) {minor_mime = v; return this;}
- public Xob_image_ext_calc_fxt Minor_mime_(String v) {return Minor_mime_(Bry_.new_ascii_(v));}
- public Xob_image_ext_calc_fxt W_(int v) {w = v; return this;}
- public Xob_image_ext_calc_fxt H_(int v) {h = v; return this;}
- public Xob_image_ext_calc_fxt Test(int expd) {
- Tfds.Eq(expd, Xob_wiki_image_sql.Calc_ext_id(Gfo_usr_dlg_.Null, name, media_type, minor_mime, w, h));
+ public Xob_image_cmd_fxt Name_(String v) {name = Bry_.new_ascii_(v); return this;}
+ public Xob_image_cmd_fxt Media_type_(String v) {media_type = Bry_.new_ascii_(v); return this;}
+ public Xob_image_cmd_fxt Minor_mime_(byte[] v) {minor_mime = v; return this;}
+ public Xob_image_cmd_fxt Minor_mime_(String v) {return Minor_mime_(Bry_.new_ascii_(v));}
+ public Xob_image_cmd_fxt W_(int v) {w = v; return this;}
+ public Xob_image_cmd_fxt H_(int v) {h = v; return this;}
+ public Xob_image_cmd_fxt Test(int expd) {
+ Tfds.Eq(expd, Xob_image_cmd.Calc_ext_id(Gfo_usr_dlg_.Null, name, media_type, minor_mime, w, h));
return this;
}
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_wiki_image_tbl.java b/400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_image_tbl.java
similarity index 85%
rename from 400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_wiki_image_tbl.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_image_tbl.java
index 5cf8a3b43..dc91a448e 100644
--- a/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_wiki_image_tbl.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_image_tbl.java
@@ -15,11 +15,11 @@ 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 .
*/
-package gplx.xowa.bldrs.wikis.images; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wikis.*;
+package gplx.xowa.bldrs.cmds.wikis; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
import gplx.dbs.*; import gplx.dbs.engines.sqlite.*;
-public class Xob_wiki_image_tbl {
- public Xob_wiki_image_tbl Create_table(Db_conn p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql); return this;}
- public Xob_wiki_image_tbl Create_index(Db_conn p) {Sqlite_engine_.Idx_create(p, Idx_img_name); return this;}
+public class Xob_image_tbl {
+ public Xob_image_tbl Create_table(Db_conn p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql); return this;}
+ public Xob_image_tbl Create_index(Db_conn p) {Sqlite_engine_.Idx_create(p, Idx_img_name); return this;}
public Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_img_name, Fld_img_media_type, Fld_img_minor_mime, Fld_img_size, Fld_img_width, Fld_img_height, Fld_img_bits, Fld_img_ext_id, Fld_img_timestamp);}
public void Insert(Db_stmt stmt, byte[] ttl, byte[] media_type, byte[] minor_mime, int size, int w, int h, int bits, int ext_id, byte[] img_timestamp) {
stmt.Clear()
diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_page_dump_cmd_drop.java b/400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_page_dump_cmd_drop.java
new file mode 100644
index 000000000..8a372d002
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_page_dump_cmd_drop.java
@@ -0,0 +1,42 @@
+/*
+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 .
+*/
+package gplx.xowa.bldrs.cmds.wikis; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.xowa.wikis.data.*; import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*;
+public class Xob_page_dump_cmd_drop extends Xob_itm_basic_base implements Xob_cmd {
+ public Xob_page_dump_cmd_drop(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
+ public String Cmd_key() {return Xob_cmd_keys.Key_wiki_page_dump_drop;}
+ public void Cmd_run() {
+ wiki.Init_assert();
+ Xowd_db_mgr db_mgr = wiki.Data_mgr__core_mgr();
+ int len = db_mgr.Dbs__len();
+ for (int i = 0; i < len; i++) {
+ Xowd_db_file db_file = db_mgr.Dbs__get_at(i);
+ switch (db_file.Tid()) {
+ case Xowd_db_file_.Tid_wiki_solo:
+ case Xowd_db_file_.Tid_text_solo:
+ case Xowd_db_file_.Tid_text:
+ db_file.Conn().Ddl_delete_tbl(Xobd_page_dump_tbl.Tbl_name);
+ break;
+ }
+ }
+ }
+ public void Cmd_init(Xob_bldr bldr) {}
+ public void Cmd_bgn(Xob_bldr bldr) {}
+ public void Cmd_end() {}
+ public void Cmd_term() {}
+}
diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_page_dump_cmd_make.java b/400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_page_dump_cmd_make.java
new file mode 100644
index 000000000..22bc4896c
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_page_dump_cmd_make.java
@@ -0,0 +1,44 @@
+/*
+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 .
+*/
+package gplx.xowa.bldrs.cmds.wikis; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.xowa.wikis.data.*; import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*;
+public class Xob_page_dump_cmd_make extends Xob_itm_basic_base implements Xob_cmd {
+ public Xob_page_dump_cmd_make(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
+ public String Cmd_key() {return Xob_cmd_keys.Key_wiki_page_dump_make;}
+ public void Cmd_run() {
+ wiki.Init_assert();
+ Xowd_db_mgr db_mgr = wiki.Data_mgr__core_mgr();
+ Io_url page_db_url = db_mgr.Db__core().Url();
+ int len = db_mgr.Dbs__len();
+ for (int i = 0; i < len; i++) {
+ Xowd_db_file db_file = db_mgr.Dbs__get_at(i);
+ switch (db_file.Tid()) {
+ case Xowd_db_file_.Tid_wiki_solo:
+ case Xowd_db_file_.Tid_text_solo:
+ case Xowd_db_file_.Tid_text:
+ Xobd_page_dump_tbl tbl = new Xobd_page_dump_tbl(db_file.Conn());
+ tbl.Create_data(page_db_url, db_file.Id());
+ break;
+ }
+ }
+ }
+ public void Cmd_init(Xob_bldr bldr) {}
+ public void Cmd_bgn(Xob_bldr bldr) {}
+ public void Cmd_end() {}
+ public void Cmd_term() {}
+}
diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_page_dump_tbl.java b/400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_page_dump_tbl.java
new file mode 100644
index 000000000..49075c774
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_page_dump_tbl.java
@@ -0,0 +1,47 @@
+/*
+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 .
+*/
+package gplx.xowa.bldrs.cmds.wikis; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*;
+class Xobd_page_dump_tbl {
+ public final static String Tbl_name = "page_dump";
+ private final String fld_id, fld_title, fld_namespace, fld_is_redirect;
+ private final Db_conn conn; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
+ public Xobd_page_dump_tbl(Db_conn conn) {
+ this.conn = conn;
+ this.fld_id = flds.Add_int_pkey("page_id");
+ this.fld_title = flds.Add_str("page_title", 255);
+ this.fld_namespace = flds.Add_int("page_namespace");
+ this.fld_is_redirect = flds.Add_int("page_is_redirect");
+ }
+ public void Create_data(Io_url page_db_url, int text_db_id) {
+ conn.Ddl_create_tbl(Db_meta_tbl.new_(Tbl_name, flds));
+ Db_attach_cmd.new_(conn, "page_db", page_db_url)
+ .Add_fmt("text_db_prep.clone_page", Sql_insert_data, text_db_id)
+ .Exec();
+ conn.Ddl_create_idx(Db_meta_idx.new_unique_by_tbl(Tbl_name, "main", fld_id, fld_namespace, fld_is_redirect, fld_title));
+ }
+ private static final String Sql_insert_data = String_.Concat_lines_nl
+ ( "INSERT INTO page_dump (page_id, page_title, page_namespace, page_is_redirect)"
+ , "SELECT p.page_id"
+ , ", p.page_title"
+ , ", p.page_namespace"
+ , ", p.page_is_redirect"
+ , "FROM page p"
+ , "WHERE p.page_text_db_id = {0};"
+ );
+}
diff --git a/400_xowa/src/gplx/xowa/bldrs/wikis/redirects/Xob_redirect_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_redirect_cmd.java
similarity index 71%
rename from 400_xowa/src/gplx/xowa/bldrs/wikis/redirects/Xob_redirect_cmd.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_redirect_cmd.java
index 57bede480..53d191147 100644
--- a/400_xowa/src/gplx/xowa/bldrs/wikis/redirects/Xob_redirect_cmd.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_redirect_cmd.java
@@ -15,18 +15,19 @@ 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 .
*/
-package gplx.xowa.bldrs.wikis.redirects; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wikis.*;
-import gplx.xowa.wikis.data.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.bldrs.oimgs.*;
+package gplx.xowa.bldrs.cmds.wikis; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.xowa.dbs.*; import gplx.xowa.wikis.data.tbls.*;
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;
public Xob_redirect_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
- @Override public String Cmd_key() {return KEY_redirect;} public static final String KEY_redirect = "wiki.redirect";
+ @Override public String Cmd_key() {return Xob_cmd_keys.Key_wiki_redirect;}
@Override public int[] Init_ns_ary() {return Int_.Ary(Xow_ns_.Id_file);} // restrict to file ns
@Override public byte Init_redirect() {return Bool_.Y_byte;} // restrict to redirects
- @Override protected void Init_reset(Db_conn p) {
- p.Exec_sql("DELETE FROM " + Xodb_xowa_cfg_tbl.Tbl_name);
- p.Exec_sql("DELETE FROM " + Xob_redirect_tbl.Tbl_name);
+ @Override protected void Init_reset(Db_conn conn) {
+ Db_cfg_tbl cfg_tbl = new Db_cfg_tbl(conn, "xowa_cfg");
+ cfg_tbl.Delete_all();
+ conn.Exec_sql("DELETE FROM " + Xob_redirect_tbl.Tbl_name);
}
@Override protected Db_conn Init_db_file() {
this.db_mgr = wiki.Db_mgr_as_sql();
@@ -34,23 +35,22 @@ public class Xob_redirect_cmd extends Xob_dump_mgr_base {
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();
+ conn.Txn_bgn();
return conn;
- }
-
+ }
@Override protected void Cmd_bgn_end() {}
- @Override public void Exec_pg_itm_hook(Xow_ns ns, Xodb_page page, byte[] page_src) {
+ @Override public void Exec_pg_itm_hook(int ns_ord, Xow_ns ns, Xowd_page_itm page, byte[] page_src) {
Xoa_ttl redirect_ttl = redirect_mgr.Extract_redirect(page_src, page_src.length);
byte[] redirect_ttl_bry = Xoa_ttl.Replace_spaces(redirect_ttl.Page_db()); // NOTE: spaces can still exist b/c redirect is scraped from #REDIRECT which sometimes has a mix; EX: "A_b c"
redirect_ttl_bry = encoder.Decode(redirect_ttl_bry);
redirect_tbl.Insert(page.Id(), Xoa_ttl.Replace_spaces(page.Ttl_page_db()), -1, redirect_ttl.Ns().Id(), redirect_ttl_bry, redirect_ttl.Anch_txt(), 1);
}
@Override public void Exec_commit_hook() {
- conn.Txn_mgr().Txn_end_all_bgn_if_none();
+ conn.Txn_sav();
}
@Override public void Exec_end_hook() {
- conn.Txn_mgr().Txn_end_all();
+ conn.Txn_end();
redirect_tbl.Create_indexes(usr_dlg);
- redirect_tbl.Update_trg_redirect_id(db_mgr.Core_data_mgr().Get_url(Xowd_db_file_.Tid_core), 4);
+ redirect_tbl.Update_trg_redirect_id(db_mgr.Core_data_mgr().Db__core().Url(), 4);
}
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/wikis/redirects/Xob_redirect_tbl.java b/400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_redirect_tbl.java
similarity index 91%
rename from 400_xowa/src/gplx/xowa/bldrs/wikis/redirects/Xob_redirect_tbl.java
rename to 400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_redirect_tbl.java
index fa66c1de7..ad722cf15 100644
--- a/400_xowa/src/gplx/xowa/bldrs/wikis/redirects/Xob_redirect_tbl.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_redirect_tbl.java
@@ -15,20 +15,20 @@ 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 .
*/
-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.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.bldrs.oimgs.*;
+package gplx.xowa.bldrs.cmds.wikis; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.dbs.*; import gplx.dbs.engines.sqlite.*;
public class Xob_redirect_tbl {
private Url_encoder encoder; private Db_stmt insert_stmt;
public Xob_redirect_tbl(Io_url root_dir, Url_encoder encoder) {
- this.db_file = Xodb_db_file.init__wiki_redirect(root_dir);
+ this.db_file = Xob_db_file.new__wiki_redirect(root_dir);
this.conn = db_file.Conn();
this.encoder = encoder;
}
- public Xodb_db_file Db_file() {return db_file;} private Xodb_db_file db_file;
+ public Xob_db_file Db_file() {return db_file;} private Xob_db_file db_file;
public Db_conn Conn() {return conn;} private Db_conn conn;
public Xob_redirect_tbl Create_table() {Sqlite_engine_.Tbl_create(conn, Tbl_name, Tbl_sql); return this;}
public void Create_indexes(Gfo_usr_dlg usr_dlg) {
- Sqlite_engine_.Idx_create(usr_dlg, conn, Xodb_db_file.Name__wiki_redirect, Idx_trg_id, Idx_trg_ttl);
+ Sqlite_engine_.Idx_create(usr_dlg, conn, Xob_db_file.Name__wiki_redirect, Idx_trg_id, Idx_trg_ttl);
}
public void Update_trg_redirect_id(Io_url core_url, int max_redirected_depth) {
Sqlite_engine_.Db_attach(conn, "page_db", core_url.Raw()); // link database with page table
@@ -67,7 +67,7 @@ public class Xob_redirect_tbl {
}
public void Rls_all() {
insert_stmt.Rls();
- conn.Conn_term();
+ conn.Rls_conn();
}
public static final String Tbl_name = "redirect";
private static final String
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_fsdb_make.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_fsdb_make.java
deleted file mode 100644
index 478f60f2d..000000000
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_fsdb_make.java
+++ /dev/null
@@ -1,326 +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 .
-*/
-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.wikis.*; import gplx.xowa.dbs.*; import gplx.fsdb.*; import gplx.ios.*; import gplx.xowa.dbs.tbls.*;
-import gplx.xowa.files.*; import gplx.xowa.files.repos.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.fsdb.*;
-import gplx.xowa.bldrs.oimgs.*;
-import gplx.fsdb.data.*; import gplx.fsdb.meta.*;
-public class Xob_fsdb_make extends Xob_itm_basic_base implements Xob_cmd {
- private int select_interval = 2500, progress_interval = 1, commit_interval = 1, delete_interval = 5000;
- private int exec_count, exec_count_max = Int_.MaxValue;
- private int exec_fail, exec_fail_max = 2000; // 115 over 900k
- private boolean exec_done, resume_enabled = false;
- private int page_id_bmk = -1, lnki_id_bmk = -1;
- private int page_id_val = -1, lnki_id_val = -1;
- private int page_id_end = Int_.MaxValue;
- private boolean reset_db = false, exit_after_commit = false, exit_now = false;
- private byte[] wiki_key;
- private Xobu_poll_mgr poll_mgr; private int poll_interval;
- private long time_bgn;
- private Xodb_xowa_cfg_tbl tbl_cfg; private Db_conn conn; private Db_stmt db_select_stmt;
- private Xof_bin_mgr src_mgr;
- private Xof_fsdb_mgr__sql trg_fsdb_mgr; private Fsm_mnt_mgr trg_mnt_mgr;
- private Fsd_img_itm tmp_img_itm = new Fsd_img_itm(); private Fsd_thm_itm tmp_thm_itm = Fsd_thm_itm.new_(); private Fsd_fil_itm tmp_fil_itm = new Fsd_fil_itm();
- private boolean app_restart_enabled = false;
- 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();
- src_fsdb_mgr.Init_by_wiki(wiki);
- src_mgr = src_fsdb_mgr.Bin_mgr();
- trg_mnt_mgr = trg_fsdb_mgr.Mnt_mgr();
- trg_mnt_mgr.Insert_to_mnt_(Fsm_mnt_mgr.Mnt_idx_main); // NOTE: do not delete; mnt_mgr default to Mnt_idx_user; DATE:2014-04-25
- Fsm_mnt_mgr.Patch(trg_mnt_mgr); // NOTE: always patch again; fsdb_make may be run separately without lnki_temp; DATE:2014-04-26
- poll_mgr = new Xobu_poll_mgr(bldr.App());
- }
- public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.fsdb_make";
- public void Cmd_ini(Xob_bldr bldr) {}
- public void Cmd_bgn(Xob_bldr bldr) {
- ((Xof_bin_wkr__http_wmf)src_fsdb_mgr.Bin_mgr().Wkrs__get_or_new(Xof_bin_wkr_.Key_http_wmf)).Fail_timeout_(1000); // NOTE: set Fail_timeout here; DATE:2014-06-21; NOTE: do not put in ctor, or else will be 1st wkr; DATE:2014-06-28
- this.wiki_key = wiki.Domain_bry();
- wiki.Init_assert();
- poll_interval = poll_mgr.Poll_interval();
- }
- public void Cmd_run() {Exec();}
- public void Cmd_end() {
- if (exec_done) {
- page_id_bmk = Int_.MaxValue;
- lnki_id_bmk = Int_.MaxValue;
- }
- usr_dlg.Note_many("", "", "done: ~{0} ~{1}", exec_count, DecimalAdp_.divide_safe_(exec_count, Env_.TickCount_elapsed_in_sec(time_bgn)).Xto_str("#,###.000"));
- this.Txn_save();
- tbl_cfg.Delete(Cfg_fsdb_make, Cfg_page_id_bmk); tbl_cfg.Delete(Cfg_fsdb_make, Cfg_lnki_id_bmk); // delete bmks if future reruns are needed; DATE:2014-08-20
- trg_fsdb_mgr.Txn_save();
- trg_fsdb_mgr.Rls(); // save changes and rls all connections
- db_select_stmt.Rls();
- conn.Conn_term();
- }
- public void Cmd_print() {}
- private int db_reset_tries_count = 0, db_reset_tries_max = 5;
- public void Exec() {
- Init_db(true);
- if (!Init_bmk(tbl_cfg)) {usr_dlg.Note_many("", "", "make done; delete xowa_cfg to restart"); return;}
- ListAdp list = ListAdp_.new_();
- boolean loop = true;
- time_bgn = Env_.TickCount();
- usr_dlg.Note_many("", "", "total pending: ~{0}", Xob_xfer_regy_tbl.Select_total_pending(conn));
- this.Txn_open();
- while (loop) {
- byte rslt = Select_ttls(list);
- switch (rslt) {
- case Select_ttls_rslt_stop: loop = false; break;
- case Select_ttls_rslt_next_page: ++page_id_val; lnki_id_val = 0; continue;
- case Select_ttls_rslt_process: break;
- }
- if (!loop) break; // no more ttls found
- int list_count = list.Count();
- usr_dlg.Prog_many("", "", "fetched pages: ~{0}", list_count);
- for (int i = 0; i < list_count; i++) {
- Xodb_tbl_oimg_xfer_itm itm = (Xodb_tbl_oimg_xfer_itm)list.FetchAt(i);
- if (!Download_itm(itm)
- || app_restart_enabled) {
- this.Txn_renew();
- if (db_reset_tries_count < db_reset_tries_max) {
- db_reset_tries_count++;
- usr_dlg.Note_many("", "", "restarting db: ~{0}", db_reset_tries_count);
- Init_db(false);
- i--;
- continue;
- }
- else
- return;
- }
- if ( exit_now
- || exec_count >= exec_count_max
- || exec_fail >= exec_fail_max
- || page_id_val >= page_id_end
- ) {
- this.Txn_renew();
- return;
- }
- }
- }
- exec_done = true;
- }
- private void Init_db(boolean chk_reset) {
- Xodb_db_file db_file = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir());
- conn = db_file.Conn();
- tbl_cfg = new Xodb_xowa_cfg_tbl().Conn_(conn);
- if (reset_db && chk_reset) {
- conn.Exec_qry(Db_qry_.delete_tbl_(Xodb_xowa_cfg_tbl.Tbl_name));
- }
- db_select_stmt = Xob_xfer_regy_tbl.Select_by_page_id_stmt(conn);
- }
- private boolean Init_bmk(Xodb_xowa_cfg_tbl tbl_cfg) {
- if (!resume_enabled) { // clear cfg entries if resume disabled; note that disabled by default; DATE:2014-10-24
- tbl_cfg.Delete(Cfg_fsdb_make, Cfg_page_id_bmk);
- tbl_cfg.Delete(Cfg_fsdb_make, Cfg_lnki_id_bmk);
- }
- String page_id_str = tbl_cfg.Select_val(Cfg_fsdb_make, Cfg_page_id_bmk);
- if (page_id_str == null) { // bmks not found; new db; insert;
- tbl_cfg.Insert_str(Cfg_fsdb_make, Cfg_page_id_bmk , Int_.Xto_str(page_id_bmk));
- tbl_cfg.Insert_str(Cfg_fsdb_make, Cfg_lnki_id_bmk , Int_.Xto_str(lnki_id_bmk));
- if (page_id_bmk == -1)
- page_id_bmk = 0;
- if (lnki_id_bmk == -1)
- lnki_id_bmk = 0;
- }
- else {
- if (page_id_bmk == -1) {
- page_id_bmk = Int_.parse_(page_id_str);
- if (page_id_bmk == Int_.MaxValue) return false;
- usr_dlg.Note_many("", "", "restoring from bmk: page_id=~{0}", page_id_bmk);
- }
- if (lnki_id_bmk == -1) {
- lnki_id_bmk = tbl_cfg.Select_val_as_int(Cfg_fsdb_make, Cfg_lnki_id_bmk);
- usr_dlg.Note_many("", "", "restoring from bmk: lnki_id=~{0}", lnki_id_bmk);
- }
- }
- page_id_val = page_id_bmk;
- lnki_id_val = lnki_id_bmk;
- return true;
- }
- private static final byte Select_ttls_rslt_stop = 0, Select_ttls_rslt_process = 1, Select_ttls_rslt_next_page = 2;
- private byte Select_ttls(ListAdp list) {
- list.Clear();
- DataRdr rdr = DataRdr_.Null;
- boolean pages_found = false, links_found = false;
- try {
- rdr = Xob_xfer_regy_tbl.Select_by_lnki_page_id(conn, page_id_val, select_interval);
- while (rdr.MoveNextPeer()) {
- pages_found = true; // at least one page found; set true
- Xodb_tbl_oimg_xfer_itm itm = Xodb_tbl_oimg_xfer_itm.new_rdr_( rdr);
- if (itm.Lnki_page_id() == page_id_val // if same page_id but lnki_id < last, then ignore; needed b/c select selects by page_id, and need to be handle breaks between pages
- && itm.Lnki_id() <= lnki_id_val)
- continue;
- links_found = true;
- list.Add(itm);
- }
- } finally {rdr.Rls();}
- if (pages_found && !links_found)
- return Select_ttls_rslt_next_page;
- else if (!pages_found )
- return Select_ttls_rslt_stop;
- else
- return Select_ttls_rslt_process;
- }
- private boolean Download_itm(Xodb_tbl_oimg_xfer_itm itm) {
- try {
- page_id_val = itm.Lnki_page_id();
- lnki_id_val = itm.Lnki_id();
- Download(itm);
- if ((exec_count % poll_interval) == 0)
- poll_mgr.Poll();
- if (exec_count % commit_interval == 0)
- this.Txn_renew();
- if (exec_count % delete_interval == 0)
- Delete_files();
- return true;
- }
- catch (Exception exc) {
- ++exec_fail;
- String exc_message = Err_.Message_gplx_brief(exc);
- usr_dlg.Warn_many("", "", "download error; ttl=~{0} w=~{1} err=~{2}", String_.new_utf8_(itm.Lnki_ttl()), itm.Lnki_w(), exc_message);
- return !String_.Has(exc_message, "out of memory"); // hard stop if "java.sql.SQLException out of memory [java.sql.SQLException]" or "java.sql.SQLException [SQLITE_NOMEM] A malloc() failed (out of memory) [java.sql.SQLException]"; else code will fail for a hundred or more downloads before coming to a hard stop
- }
- }
- private void Download(Xodb_tbl_oimg_xfer_itm itm) {
- byte[] wiki = itm.Orig_repo_id() == Xof_repo_itm.Repo_local ? wiki_key : Xow_domain_.Domain_bry_commons;
- itm.Orig_repo_name_(wiki);
- Io_stream_rdr bin_rdr = Io_stream_rdr_.Null;
- if ((exec_count % progress_interval) == 0) {
- int time_elapsed = Env_.TickCount_elapsed_in_sec(time_bgn);
- usr_dlg.Prog_many("", "", "prog: num=~{0} err=~{1} time=~{2} rate=~{3} page=~{4} lnki=~{5} ttl=~{6}", exec_count, exec_fail, time_elapsed, Math_.Div_safe_as_int(exec_count, time_elapsed), page_id_val, lnki_id_val, String_.new_utf8_(itm.Orig_ttl()));
- }
- try {
- bin_rdr = src_mgr.Find_as_rdr(Xof_exec_tid.Tid_wiki_page, itm);
- if (bin_rdr == Io_stream_rdr_.Null)
- Download_fail(itm);
- else {
- Download_pass(itm, bin_rdr);
- }
- }
- finally {
- bin_rdr.Rls();
- }
- ++exec_count;
- }
- private void Download_fail(Xodb_tbl_oimg_xfer_itm itm) {
- ++exec_fail;
- String lnki_ttl = String_.Format("[[File:{0}|{1}px]]", String_.new_utf8_(itm.Lnki_ttl()), itm.Html_w());
- usr_dlg.Warn_many("", "", "failed: ttl=~{0}", lnki_ttl);
- }
- private void Download_pass(Xodb_tbl_oimg_xfer_itm itm, Io_stream_rdr rdr) {
- int db_uid = -1;
- if (itm.File_is_orig()) {
- if (itm.Lnki_ext().Id_is_image()) {
- trg_fsdb_mgr.Mnt_mgr().Img_insert(tmp_img_itm, itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_ext_id(), itm.Orig_w(), itm.Orig_h(), Sqlite_engine_.Date_null, Fsd_thm_tbl.Hash_null, rdr.Len(), rdr);
- db_uid = tmp_img_itm.Id();
- }
- else {
- trg_fsdb_mgr.Mnt_mgr().Fil_insert(tmp_fil_itm, itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_ext_id(), Sqlite_engine_.Date_null, Fsd_thm_tbl.Hash_null, rdr.Len(), rdr);
- db_uid = tmp_fil_itm.Id();
- }
- }
- else {
- trg_fsdb_mgr.Mnt_mgr().Thm_insert(tmp_thm_itm, itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_ext_id(), itm.Html_w(), itm.Html_h(), itm.Lnki_time(), itm.Lnki_page(), Sqlite_engine_.Date_null, Fsd_thm_tbl.Hash_null, rdr.Len(), rdr);
- db_uid = tmp_thm_itm.Id();
- }
- if (app.Mode() == Xoa_app_.Mode_gui)
- app.Usr_dlg().Log_direct(String_.Format("download done; size={0} id={1}", rdr.Len(), db_uid));
- }
- private void Txn_renew() {
- this.Txn_save();
- this.Txn_open();
- }
- private void Txn_open() {
- tbl_cfg.Conn().Txn_mgr().Txn_bgn_if_none();
- trg_mnt_mgr.Txn_open();
- }
- private void Txn_save() {
- usr_dlg.Prog_many("", "", "committing data: count=~{0} failed=~{1}", exec_count, exec_fail);
- tbl_cfg.Update(Cfg_fsdb_make, Cfg_page_id_bmk, page_id_val);
- tbl_cfg.Update(Cfg_fsdb_make, Cfg_lnki_id_bmk, lnki_id_val);
- tbl_cfg.Conn().Txn_mgr().Txn_end_all();
- trg_mnt_mgr.Txn_save();
- if (exit_after_commit)
- exit_now = true;
- }
- private void Delete_files() {// TODO: purge /xowa/file/ dir to free up hard disk space
- }
- @Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
- if (ctx.Match(k, Invk_progress_interval_)) progress_interval = m.ReadInt("v");
- else if (ctx.Match(k, Invk_commit_interval_)) commit_interval = m.ReadInt("v");
- else if (ctx.Match(k, Invk_select_interval_)) select_interval = m.ReadInt("v");
- else if (ctx.Match(k, Invk_src_mgr)) return src_mgr;
- else if (ctx.Match(k, Invk_poll_mgr)) return poll_mgr;
- else if (ctx.Match(k, Invk_reset_db_)) reset_db = m.ReadYn("v");
- else if (ctx.Match(k, Invk_exec_count_max_)) exec_count_max = m.ReadInt("v");
- else if (ctx.Match(k, Invk_exec_fail_max_)) exec_fail_max = m.ReadInt("v");
- else if (ctx.Match(k, Invk_exit_now_)) exit_now = m.ReadYn("v");
- else if (ctx.Match(k, Invk_exit_after_commit_)) exit_after_commit = m.ReadYn("v");
- else if (ctx.Match(k, Invk_page_id_bmk_)) page_id_bmk = m.ReadInt("v");
- else if (ctx.Match(k, Invk_lnki_id_bmk_)) lnki_id_bmk = m.ReadInt("v");
- else if (ctx.Match(k, Invk_delete_interval_)) delete_interval = m.ReadInt("v");
- else if (ctx.Match(k, Invk_app_restart_enabled_)) app_restart_enabled = m.ReadBool("v");
- else if (ctx.Match(k, Invk_db_restart_tries_max_)) db_reset_tries_max = m.ReadInt("v");
- else if (ctx.Match(k, Invk_trg_fsdb_mgr)) return trg_fsdb_mgr;
- else if (ctx.Match(k, Invk_resume_enabled_)) resume_enabled = m.ReadYn("v");
- else return GfoInvkAble_.Rv_unhandled;
- return this;
- }
- private static final String Cfg_fsdb_make = "bldr.fsdb_make", Cfg_page_id_bmk = "page_id_bmk", Cfg_lnki_id_bmk = "lnki_id_bmk";
- private static final String Invk_select_interval_ = "select_interval_", Invk_progress_interval_ = "progress_interval_", Invk_commit_interval_ = "commit_interval_"
- , Invk_page_id_bmk_ = "page_id_bmk_", Invk_lnki_id_bmk_ = "lnki_id_bmk_"
- , Invk_src_mgr = "src_mgr"
- , Invk_poll_mgr = "poll_mgr", Invk_reset_db_ = "reset_db_"
- , Invk_exec_count_max_ = "exec_count_max_", Invk_exec_fail_max_ = "exec_fail_max_", Invk_exit_now_ = "exit_now_", Invk_exit_after_commit_ = "exit_after_commit_"
- , Invk_delete_interval_ = "delete_interval_"
- , Invk_app_restart_enabled_ = "app_restart_enabled_"
- , Invk_db_restart_tries_max_ = "db_restart_tries_max_"
- , Invk_trg_fsdb_mgr = "trg_fsdb_mgr"
- , Invk_resume_enabled_ = "resume_enabled_"
- ;
- public static byte Status_null = 0, Status_pass = 1, Status_fail = 2;
-}
-class Xodb_tbl_oimg_xfer_itm extends Xof_fsdb_itm { public int Lnki_id() {return lnki_id;} private int lnki_id;
- public int Lnki_page_id() {return lnki_page_id;} private int lnki_page_id;
- public int Lnki_ext_id() {return lnki_ext_id;} private int lnki_ext_id;
- public static Xodb_tbl_oimg_xfer_itm new_rdr_(DataRdr rdr) {
- Xodb_tbl_oimg_xfer_itm rv = new Xodb_tbl_oimg_xfer_itm();
- rv.lnki_id = rdr.ReadInt(Xob_xfer_regy_tbl.Fld_lnki_id);
- rv.lnki_page_id = rdr.ReadInt(Xob_xfer_regy_tbl.Fld_lnki_page_id);
- rv.lnki_ext_id = rdr.ReadInt(Xob_xfer_regy_tbl.Fld_lnki_ext);
- rv.Ctor_by_fsdb_make
- ( rdr.ReadBryByStr(Xob_xfer_regy_tbl.Fld_lnki_ttl)
- , rdr.ReadInt(Xob_xfer_regy_tbl.Fld_file_w), rdr.ReadInt(Xob_xfer_regy_tbl.Fld_file_h) // set lnki_size; Xof_bin_mgr uses lnki_size
- , Xof_lnki_time.Db_load_double(rdr, Xob_xfer_regy_tbl.Fld_lnki_time)
- , Xof_lnki_page.Db_load_int(rdr, Xob_xfer_regy_tbl.Fld_lnki_page)
- , rdr.ReadByte(Xob_xfer_regy_tbl.Fld_orig_repo)
- , rdr.ReadInt(Xob_xfer_regy_tbl.Fld_orig_w)
- , rdr.ReadInt(Xob_xfer_regy_tbl.Fld_orig_h)
- , Bry_.Empty
- , rdr.ReadByte(Xob_xfer_regy_tbl.Fld_file_is_orig) == Bool_.Y_byte
- );
- return rv;
- }
-}
diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_tbl.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_tbl.java
deleted file mode 100644
index 2ff9c300e..000000000
--- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_tbl.java
+++ /dev/null
@@ -1,62 +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 .
-*/
-package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.dbs.*;
-import gplx.dbs.engines.sqlite.*;
-class Xob_lnki_temp_tbl {
- public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);}
- public static Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_lnki_page_id, Fld_lnki_ttl, Fld_lnki_commons_ttl, Fld_lnki_ext, Fld_lnki_type, Fld_lnki_src_tid, Fld_lnki_w, Fld_lnki_h, Fld_lnki_upright, Fld_lnki_time, Fld_lnki_page);}
- public static void Insert(Db_stmt stmt, int page_id, byte[] ttl, byte[] ttl_commons, byte ext_id, byte img_type, byte lnki_src_tid, int w, int h, double upright, double thumbtime, int page) {
- stmt.Clear()
- .Val_int(page_id)
- .Val_bry_as_str(ttl)
- .Val_bry_as_str(ttl_commons)
- .Val_byte(ext_id)
- .Val_byte(img_type)
- .Val_int(lnki_src_tid)
- .Val_int(w)
- .Val_int(h)
- .Val_double(upright)
- .Val_double(gplx.xowa.files.Xof_lnki_time.Db_save_double(thumbtime))
- .Val_int(page)
- .Exec_insert();
- }
- public static final String Tbl_name = "lnki_temp"
- , Fld_lnki_id = "lnki_id"
- , Fld_lnki_page_id = "lnki_page_id", Fld_lnki_ttl = "lnki_ttl", Fld_lnki_commons_ttl = "lnki_commons_ttl"
- , Fld_lnki_ext = "lnki_ext", Fld_lnki_type = "lnki_type", Fld_lnki_src_tid = "lnki_src_tid"
- , Fld_lnki_w = "lnki_w", Fld_lnki_h = "lnki_h", Fld_lnki_upright = "lnki_upright"
- , Fld_lnki_time = "lnki_time", Fld_lnki_page = "lnki_page"
- ;
- private static final String Tbl_sql = String_.Concat_lines_nl
- ( "CREATE TABLE IF NOT EXISTS lnki_temp"
- , "( lnki_id integer NOT NULL PRIMARY KEY AUTOINCREMENT" // NOTE: insertion order index
- , ", lnki_page_id integer NOT NULL"
- , ", lnki_ttl varchar(255) NOT NULL"
- , ", lnki_commons_ttl varchar(255) NULL"
- , ", lnki_ext integer NOT NULL"
- , ", lnki_type integer NOT NULL"
- , ", lnki_src_tid integer NOT NULL"
- , ", lnki_w integer NOT NULL"
- , ", lnki_h integer NOT NULL"
- , ", lnki_upright double NOT NULL"
- , ", lnki_time double NOT NULL" // thumbtime is float; using double b/c upright does and would like to keep datatypes same; https://bugzilla.wikimedia.org/show_bug.cgi?id=39014
- , ", lnki_page integer NOT NULL"
- , ");"
- );
-}
diff --git a/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_log_mgr.java b/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_log_mgr.java
index 7a35009c3..8734211b4 100644
--- a/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_log_mgr.java
+++ b/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_log_mgr.java
@@ -25,13 +25,13 @@ class Dg_log_mgr {
private final Dg_page_rule_tbl tbl_page_rule = new Dg_page_rule_tbl();
private final Bry_bfr tmp_bfr = Bry_bfr.reset_(16);
public void Init(Io_url db_url) {
- Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new("", db_url);
+ Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new(db_url);
conn = conn_data.Conn(); boolean created = conn_data.Created();
tbl_file.Conn_(conn, created);
tbl_rule.Conn_(conn, created);
tbl_page_score.Conn_(conn, created);
tbl_page_rule.Conn_(conn, created);
- conn.Txn_mgr().Txn_bgn();
+ conn.Txn_bgn();
}
public void Insert_file(Dg_file file) {tbl_file.Insert(file.Id(), file.Rel_path(), file.Lines().length);}
public void Insert_rule(Dg_rule rule) {tbl_rule.Insert(rule.File_id(), rule.Id(), rule.Idx(), rule.Score(), Dg_word.Ary_concat(rule.Words(), tmp_bfr, Byte_ascii.Tilde));}
@@ -39,8 +39,8 @@ class Dg_log_mgr {
tbl_page_score.Insert(log_tid, page_id, page_ns, page_ttl, page_len, page_score, page_rule_count, clude_type);
}
public void Insert_page_rule(int log_tid, int page_id, int rule_id, int rule_score_total) {tbl_page_rule.Insert(log_tid, page_id, rule_id, rule_score_total);}
- public void Commit() {conn.Txn_mgr().Txn_end_all_bgn_if_none();}
- public void Rls() {conn.Txn_mgr().Txn_end_all();}
+ public void Commit() {conn.Txn_sav();}
+ public void Rls() {conn.Txn_end();}
}
class Dg_file_tbl {
private String tbl_name = "dg_file"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
@@ -55,12 +55,12 @@ class Dg_file_tbl {
Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
, Db_meta_idx.new_unique_by_tbl(tbl_name, "file_id", fld_file_id)
);
- conn.Exec_create_tbl_and_idx(meta);
+ conn.Ddl_create_tbl(meta);
}
stmt_insert = null;
}
public void Insert(int file_id, String file_path, int rule_count) {
- if (stmt_insert == null) stmt_insert = conn.Rls_reg(conn.Stmt_insert(tbl_name, flds));
+ if (stmt_insert == null) stmt_insert = conn.Stmt_insert(tbl_name, flds);
stmt_insert.Clear()
.Val_int(fld_file_id , file_id)
.Val_str(fld_file_path , file_path)
@@ -68,7 +68,7 @@ class Dg_file_tbl {
.Exec_insert();
}
}
-class Dg_rule_tbl {
+class Dg_rule_tbl implements RlsAble {
private String tbl_name = "dg_rule"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
private String fld_file_id, fld_rule_id, fld_rule_idx, fld_rule_score, fld_rule_text;
private Db_conn conn; private Db_stmt stmt_insert;
@@ -83,12 +83,15 @@ class Dg_rule_tbl {
Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
, Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_rule_id)
);
- conn.Exec_create_tbl_and_idx(meta);
+ conn.Ddl_create_tbl(meta);
}
- stmt_insert = null;
+ conn.Rls_reg(this);
+ }
+ public void Rls() {
+ stmt_insert = Db_stmt_.Rls(stmt_insert);
}
public void Insert(int file_id, int rule_id, int rule_idx, int rule_score, String rule_text) {
- if (stmt_insert == null) stmt_insert = conn.Rls_reg(conn.Stmt_insert(tbl_name, flds));
+ if (stmt_insert == null) stmt_insert = conn.Stmt_insert(tbl_name, flds);
stmt_insert.Clear()
.Val_int(fld_file_id , file_id)
.Val_int(fld_rule_id , rule_id)
@@ -98,7 +101,7 @@ class Dg_rule_tbl {
.Exec_insert();
}
}
-class Dg_page_score_tbl {
+class Dg_page_score_tbl implements RlsAble {
private String tbl_name = "dg_page_score"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
private String fld_log_tid, fld_page_id, fld_page_ns, fld_page_ttl, fld_page_len, fld_page_score, fld_page_rule_count, fld_clude_type;
private Db_conn conn; private Db_stmt stmt_insert;
@@ -116,12 +119,16 @@ class Dg_page_score_tbl {
Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
, Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_log_tid, fld_page_id)
);
- conn.Exec_create_tbl_and_idx(meta);
+ conn.Ddl_create_tbl(meta);
}
stmt_insert = null;
+ conn.Rls_reg(this);
+ }
+ public void Rls() {
+ stmt_insert = Db_stmt_.Rls(stmt_insert);
}
public void Insert(int log_tid, int page_id, int page_ns, byte[] page_ttl, int page_len, int page_score, int page_rule_count, int clude_type) {
- if (stmt_insert == null) stmt_insert = conn.Rls_reg(conn.Stmt_insert(tbl_name, flds));
+ if (stmt_insert == null) stmt_insert = conn.Stmt_insert(tbl_name, flds);
stmt_insert.Clear()
.Val_int(fld_log_tid , log_tid)
.Val_int(fld_page_id , page_id)
@@ -134,7 +141,7 @@ class Dg_page_score_tbl {
.Exec_insert();
}
}
-class Dg_page_rule_tbl {
+class Dg_page_rule_tbl implements RlsAble {
private String tbl_name = "dg_page_rule"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
private String fld_log_tid, fld_page_id, fld_rule_id, fld_rule_score_total;
private Db_conn conn; private Db_stmt stmt_insert;
@@ -148,12 +155,16 @@ class Dg_page_rule_tbl {
Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
, Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_log_tid, fld_page_id, fld_rule_id)
);
- conn.Exec_create_tbl_and_idx(meta);
+ conn.Ddl_create_tbl(meta);
}
stmt_insert = null;
+ conn.Rls_reg(this);
+ }
+ public void Rls() {
+ stmt_insert = Db_stmt_.Rls(stmt_insert);
}
public void Insert(int log_tid, int page_id, int rule_id, int rule_score_total) {
- if (stmt_insert == null) stmt_insert = conn.Rls_reg(conn.Stmt_insert(tbl_name, flds));
+ if (stmt_insert == null) stmt_insert = conn.Stmt_insert(tbl_name, flds);
stmt_insert.Clear()
.Val_int(fld_log_tid , log_tid)
.Val_int(fld_page_id , page_id)
diff --git a/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_match_mgr.java b/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_match_mgr.java
index 500bbbf3d..42f03df9c 100644
--- a/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_match_mgr.java
+++ b/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_match_mgr.java
@@ -32,7 +32,7 @@ public class Dg_match_mgr {
ttl_filter_mgr.Load(Bool_.N, root_dir.GenSubFil("xowa.title.include.txt"));
ttl_filter_mgr.Load(Bool_.Y, root_dir.GenSubFil("xowa.title.exclude.txt"));
Io_url dg_root_url = root_dir.GenSubDir("dansguardian");
- Dg_file[] files = parser.Parse_dir(dg_root_url); Gfo_usr_dlg_._.Plog_many("", "", "import.dg.rules: url=~{0} files=~{1}", dg_root_url, files.length);
+ Dg_file[] files = parser.Parse_dir(dg_root_url); Gfo_usr_dlg_.I.Plog_many("", "", "import.dg.rules: url=~{0} files=~{1}", dg_root_url, files.length);
Init_by_files(files);
if (log_enabled) log_mgr.Commit();
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_parser.java b/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_parser.java
index 253cecea2..52066d8a1 100644
--- a/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_parser.java
+++ b/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_parser.java
@@ -17,12 +17,12 @@ along with this program. If not, see .
*/
package gplx.xowa.bldrs.filters.dansguardians; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.filters.*;
class Dg_parser {
- private Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_._; private final Bry_bfr key_bldr = Bry_bfr.reset_(32);
+ private Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_.I; private final Bry_bfr key_bldr = Bry_bfr.reset_(32);
private final ListAdp files = ListAdp_.new_(), lines = ListAdp_.new_(), words = ListAdp_.new_();
private int next_id = 0;
public Dg_file[] Parse_dir(Io_url dir) {
Io_url[] fil_urls = Io_mgr._.QueryDir_args(dir).Recur_(true).ExecAsUrlAry();
- this.usr_dlg = Gfo_usr_dlg_._;
+ this.usr_dlg = Gfo_usr_dlg_.I;
files.Clear();
int len = fil_urls.length;
for (int i = 0; i < len; ++i) {
diff --git a/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_parser_tst.java b/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_parser_tst.java
index b6466816f..319b0794e 100644
--- a/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_parser_tst.java
+++ b/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_parser_tst.java
@@ -34,7 +34,7 @@ public class Dg_parser_tst {
@Test public void Invalid_score() {fxt.Test_parse_line("<1a>", fxt.Make_line(Dg_rule.Score_banned, "a"));}
// @Test public void Parse_dir() {
// Dg_parser parser = new Dg_parser();
-// Gfo_usr_dlg_._ = Xoa_app_.usr_dlg_console_();
+// Gfo_usr_dlg_.I = Xoa_app_.usr_dlg_console_();
// parser.Parse_dir(Io_url_.new_dir_("C:\\xowa\\bin\\any\\xowa\\bldr\\filters\simple.wikipedia.org\\Dansguardian\\\\"));
// }
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_sql.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_sql.java
deleted file mode 100644
index 16824b72d..000000000
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_sql.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
-XOWA: the XOWA Offline Wiki Application
-Copyright (C) 2012 gnosygnu@gmail.com
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU Affero General Public License as
-published by the Free Software Foundation, either version 3 of the
-License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU Affero General Public License for more details.
-
-You should have received a copy of the GNU Affero General Public License
-along with this program. If not, see .
-*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.xowa.xtns.wdatas.*; import gplx.xowa.dbs.*; import gplx.xowa.xtns.wdatas.imports.*;
-public class Xob_init_sql extends Xob_init_base {
- public Xob_init_sql(Xob_bldr bldr, Xowe_wiki wiki) {this.Ctor(bldr, wiki);}
- @Override public String Cmd_key() {return KEY;} public static final String KEY = "import.sql.init";
- @Override public void Cmd_ini_wdata(Xob_bldr bldr, Xowe_wiki wiki) {
- bldr.Cmd_mgr().Add_cmd(wiki, Xob_wdata_qid_sql.KEY);
- bldr.Cmd_mgr().Add_cmd(wiki, Xob_wdata_pid_sql.KEY);
- }
- @Override public void Cmd_run_end(Xowe_wiki wiki) {
- if (Xodb_mgr_sql.Find_core_url(wiki) != null) throw wiki.Appe().Bldr().Usr_dlg().Fail_many("", "", "directory must not contain any sqlite3 files: ~{0}", wiki.Fsys_mgr().Root_dir().Raw());
- String ns_map = wiki.Appe().Setup_mgr().Dump_mgr().Db_ns_map();
- Xodb_mgr_sql db_mgr = wiki.Db_mgr_create_as_sql();
- db_mgr.Init_by_ns_map(ns_map); // NOTE: must Init after Xob_siteinfo_parser b/c Xob_siteinfo_parser will create new ns itms
- db_mgr.Tbl_xowa_cfg().Insert_str(Xodb_mgr_sql.Grp_wiki_init, "db_mgr.data_storage_format", Xoi_dump_mgr.Wtr_tid_to_str(db_mgr.Data_storage_format())); // NOTE: insert data_storage_format at init stage, not at term stage; bldr will reload wiki, and will default to gz since setting is not saved; DATE:2013-10-27
- }
-}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_sql_tst.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_sql_tst.java
deleted file mode 100644
index 754144804..000000000
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_sql_tst.java
+++ /dev/null
@@ -1,58 +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 .
-*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import org.junit.*;
-public class Xob_init_sql_tst {
- @Before public void init() {fxt.Clear();} private Xob_init_sql_fxt fxt = new Xob_init_sql_fxt();
- @Test public void Basic() {
-// fxt.Init_fsys();
-// fxt.Test_run();
- }
-}
-class Xob_init_sql_fxt {
- public void Clear() {
- fxt.Ctor_fsys();
- app = fxt.Wiki().Appe();
- wiki = fxt.Wiki();
- } Db_mgr_fxt fxt = new Db_mgr_fxt();
- public Xoae_app App() {return app;} private Xoae_app app;
- public Xowe_wiki Wiki() {return wiki;} private Xowe_wiki wiki;
- public void Init_fsys() {
- Io_url wiki_dir = wiki.Fsys_mgr().Root_dir();
- Io_url[] fils = Io_mgr._.QueryDir_fils(wiki_dir);
- int len = fils.length;
- for (int i = 0; i < len; i++) {
- Io_mgr._.DeleteFil(fils[i]);
- }
-// Io_mgr._.DeleteFil(wiki_dir.GenSubFil("en.wikipedia.org.sqlite3"));
- Io_mgr._.SaveFilStr(wiki_dir.GenSubFil("siteinfo.xml"), gplx.xowa.utls.upgrades.Upgrader_v00_02_01_tst.Str_siteinfo_xml);
-// Io_mgr._.DeleteDirDeep(Db_mgr_fxt.Test_root().GenSubDir("root", "wiki", "en.wikipedia.org"));
-// app.Fsys_mgr().Root_dir()
-// Db_mgr_fxt.Test_root()
- // Io_mgr._
- // mem/xowa/user/test_user/app/setup/wikixowa.core.sqlite3
- }
- public void Test_run() {
-// fxt.Init_db_sqlite(wiki.Fsys_mgr().Root_dir().GenSubFil("en.wikipedia.org.sqlite3"));
- app.Bldr().Cmd_mgr().Add_many(wiki, Xob_init_sql.KEY);
- app.Bldr().Run();
- // test database copied
- // test cfg values exists
- // test ns parsed
- }
-}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_sql.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_sql.java
deleted file mode 100644
index 753ecac27..000000000
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_sql.java
+++ /dev/null
@@ -1,202 +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 .
-*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-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 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;
- private boolean dg_enabled = Bool_.N; private Dg_match_mgr dg_match_mgr; // private Xob_ttl_filter_mgr ttl_filter_mgr;
- public Xob_page_sql(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
- public String Wkr_key() {return KEY;} public static final String KEY = "import.sql.page";
- public void Wkr_bgn(Xob_bldr bldr) {
- // init local variables
- Xoae_app app = wiki.Appe();
- app.Bldr().Parser().Trie_tab_del_(); // disable swapping for \t
- zip_mgr = app.Zip_mgr();
- redirect_mgr = wiki.Redirect_mgr();
- data_storage_format = app.Setup_mgr().Dump_mgr().Data_storage_format();
-
- // init db
- db_mgr = wiki.Db_mgr_as_sql();
- db_mgr.Data_storage_format_(data_storage_format);
- 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();
- text_stmts_mgr = new Xob_text_stmts_mgr(db_mgr, fsys_mgr);
- 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.Conn().Txn_mgr().Txn_bgn_if_none();
- }
-
- // dansguardian
- dg_match_mgr = app.Api_root().Bldr().Wikis().Filters().Dansguardians().New_mgr(wiki.Domain_str(), wiki.Fsys_mgr().Root_dir());
- dg_enabled = dg_match_mgr != null;
- }
- public void Wkr_run(Xodb_page page) {
- int page_id = page.Id();
- DateAdp modified = page.Modified_on();
- if (modified.compareTo(modified_latest) == CompareAble_.More) modified_latest = modified;
- byte[] text = page.Wtxt();
- int text_len = page.Wtxt_len();
- Xoa_ttl redirect_ttl = redirect_mgr.Extract_redirect(text, text_len);
- boolean redirect = redirect_ttl != null;
- page.Redirected_(redirect);
- Xow_ns ns = page.Ns();
- int random_int = ns.Count() + 1;
- ns.Count_(random_int);
- if (dg_enabled) {
- if (dg_match_mgr.Match(1, page_id, ns.Id(), page.Ttl_page_db(), page.Ttl_full_db(), wiki.Lang(), text)) return;
- }
- text = zip_mgr.Zip(data_storage_format, text);
- int text_stmt_idx = text_stmts_mgr.Stmt_by_ns(ns.Bldr_file_idx(), text.length); // NOTE: was text.length, but want text_len which is original page_len, not compressed; DATE:2014-08-04
- Db_stmt text_stmt = text_stmts_mgr.Stmt_at(text_stmt_idx);
- try {
- db_mgr.Page_create(page_stmt, text_stmt, page_id, page.Ns_id(), page.Ttl_page_db(), redirect, modified, text, random_int, text_stmt_idx);
- }
- catch (Exception e) {
- usr_dlg.Warn_many("", "", "failed to insert page: id=~{0} ns=~{1} title=~{2} error=~{3}", page.Id(), page.Ns_id(), String_.new_utf8_(page.Ttl_page_db()), Err_.Message_gplx_brief(e));
- page_stmt.Reset_stmt(); // must new stmt variable, else java.sql.SQLException: "statement is not executing"
- text_stmt.Reset_stmt(); // must new stmt variable, else java.sql.SQLException: "statement is not executing"
- }
- if (redirect && redirect_id_enabled) {
- redirect_tbl.Insert(page_id, page.Ttl_page_db(), redirect_ttl);
- }
- ++page_count_all;
- if (ns.Id_main() && !page.Redirected()) ++page_count_main;
- if (page_count_all % txn_commit_interval == 0) {
- Db_conn conn = text_stmts_mgr.Conn_at(text_stmt_idx);
- conn.Txn_mgr().Txn_end_all_bgn_if_none();
- if (dg_enabled) dg_match_mgr.Commit();
- }
- }
- public void Wkr_end() {
- if (dg_enabled) dg_match_mgr.Rls();
- usr_dlg.Log_many("", "", "import.page: insert done; committing pages; pages=~{0}", page_count_all);
- page_conn.Txn_mgr().Txn_end_all();
- page_stmt.Rls();
- text_stmts_mgr.Rls();
- usr_dlg.Log_many("", "", "import.page: updating core stats");
- 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.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();
- 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(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");
- else if (ctx.Match(k, Invk_idx_mode_)) idx_mode = Db_idx_mode.Xto_itm(m.ReadStr("v"));
- else if (ctx.Match(k, Invk_redirect_id_enabled_)) redirect_id_enabled = m.ReadYn("v");
- else return super.Invk(ctx, ikey, k, m);
- return this;
- }
- private static final String Invk_txn_commit_interval_ = "txn_commit_interval_", Invk_idx_mode_ = "idx_mode_", Invk_redirect_id_enabled_ = "redirect_id_enabled_";
- public void Wkr_ini(Xob_bldr bldr) {}
- public void Wkr_print() {}
- private static final Db_idx_itm
- Idx_page_title = Db_idx_itm.sql_("CREATE UNIQUE INDEX IF NOT EXISTS page__title ON page (page_namespace, page_title, page_id, page_len, page_is_redirect);") // PERF:page_id for general queries; PERF: page_len for search_suggest; PREF:page_is_redirect for oimg
- , Idx_page_random = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS page__name_random ON page (page_namespace, page_random_int);")
- ;
-}
-class Xob_text_stmts_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) {
- 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) {
- stmt = text_stmts[stmt_idx];
- if (stmt != null) return stmt_idx;
- }
- Db_conn conn = file.Conn();
- stmt = db_mgr.Tbl_text().Insert_stmt(conn);
- conn.Txn_mgr().Txn_bgn_if_none(); // automatically start txn
- Add(conn, stmt, stmt_idx);
- return stmt_idx;
- }
- public void Rls() {
- for (int i = 0; i < text_stmts_len; i++) {
- Db_stmt stmt = text_stmts[i];
- if (stmt != null) {
- Db_conn conn = text_providers[i];
- conn.Txn_mgr().Txn_end_all();
- stmt.Rls();
- }
- text_stmts[i] = null;
- }
- text_stmts = null;
- }
- 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();
- 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 != 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.Dbs__add_new(Xowd_db_file_.Tid_text);
- file_idx = file.Id();
- fsys_mgr.Tid_text_idx_(file_idx);
- }
- file.File_len_add(text_len);
- return file;
- }
- else
- 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;
- if (new_len > text_stmts_max) { // ary too small >>> expand
- text_stmts_max = new_len * 2;
- Db_stmt[] text_stmts_subs = new Db_stmt[text_stmts_max];
- Array_.CopyTo(text_stmts, 0, text_stmts_subs, 0, text_stmts_len);
- text_stmts = text_stmts_subs;
-
- Db_conn[] new_providers = new Db_conn[text_stmts_max];
- Array_.CopyTo(text_providers, 0, new_providers, 0, text_stmts_len);
- text_providers = new_providers;
- }
- text_stmts[stmt_idx] = stmt;
- text_providers[stmt_idx] = conn;
- text_stmts_len = new_len;
- } private Db_stmt[] text_stmts = new Db_stmt[0]; int text_stmts_len, text_stmts_max = 0; private Db_conn[] text_providers = new Db_conn[0];
-}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_cmd.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_cmd.java
deleted file mode 100644
index 6fceafa34..000000000
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_cmd.java
+++ /dev/null
@@ -1,91 +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 .
-*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-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";
- public void Cmd_ini(Xob_bldr bldr) {}
- public void Cmd_bgn(Xob_bldr bldr) {}
- public void Cmd_run() {this.Exec(wiki);}
- public void Cmd_end() {}
- public void Cmd_print() {}
- public void Exec(Xowe_wiki wiki) {
- usr_dlg.Log_many("", "", "search_title.cmd: initing wiki");
- if (!Env_.Mode_testing()) wiki.Init_assert();
- Xowe_core_data_mgr db_fs = wiki.Db_mgr_as_sql().Core_data_mgr();
- usr_dlg.Log_many("", "", "search_title.cmd: getting core db");
- 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");
- 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.Dbs__add_new(Xowd_db_file_.Tid_search);
- }
- DataRdr page_rdr = DataRdr_.Null;
- Db_conn search_provider = search_db.Conn();
- usr_dlg.Log_many("", "", "search_title.cmd: droping tables");
- Sqlite_engine_.Tbl_delete_many(search_provider, Xodb_tbl_search_title_temp.Tbl_name, Xodb_search_title_word_tbl.Tbl_name, Xodb_search_title_page_tbl.Tbl_name);
- usr_dlg.Log_many("", "", "search_title.cmd: creating db connection; conn=~{0}", search_provider.Url().Xto_raw());
- Xodb_tbl_search_title_temp search_temp_tbl = new Xodb_tbl_search_title_temp().Create_table(search_provider);
- try {
- usr_dlg.Log_many("", "", "search_title.cmd: starting select;");
- search_provider.Txn_mgr().Txn_bgn_if_none();
- page_rdr = wiki.Db_mgr_as_sql().Tbl_page().Select_all(page_db.Conn());
- usr_dlg.Log_many("", "", "search_title.cmd: other init;");
- Db_stmt search_temp_stmt = search_temp_tbl.Insert_stmt(search_provider);
- Xol_lang lang = wiki.Lang();
- Bry_bfr bfr = Bry_bfr.reset_(1024);
- OrderedHash hash = OrderedHash_.new_();
- int page_count = 0;
- while (page_rdr.MoveNextPeer()) {
- int page_id = page_rdr.ReadInt(Xodb_page_tbl.Fld_page_id);
- byte[] ttl = page_rdr.ReadBryByStr(Xodb_page_tbl.Fld_page_title);
- byte[][] words = Xob_search_base.Split(lang, hash, bfr, ttl);
- int words_len = words.length;
- for (int i = 0; i < words_len; i++) {
- byte[] word = words[i];
- search_temp_tbl.Insert(search_temp_stmt, page_id, word);
- }
- ++page_count;
- if ((page_count % commit_interval) == 0)
- Commit(search_provider);
- else if ((page_count % progress_interval) == 0)
- usr_dlg.Prog_many("", "", "parse progress: count=~{0} last=~{1}", page_count, String_.new_utf8_(ttl));
- }
- this.Commit(search_provider);
- }
- finally {
- page_rdr.Rls();
- }
- 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().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) {
- search_provider.Txn_mgr().Txn_end_all_bgn_if_none();
- }
- @Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
- if (ctx.Match(k, Invk_commit_interval_)) commit_interval = m.ReadInt("v");
- else if (ctx.Match(k, Invk_progress_interval_)) progress_interval = m.ReadInt("v");
- else return GfoInvkAble_.Rv_unhandled;
- return this;
- } private static final String Invk_progress_interval_ = "progress_interval_", Invk_commit_interval_ = "commit_interval_";
-}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_wkr.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_wkr.java
deleted file mode 100644
index 425d3a0a7..000000000
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_wkr.java
+++ /dev/null
@@ -1,124 +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 .
-*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-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";
- @Override public gplx.ios.Io_make_cmd Make_cmd_site() {return this;}
- public Io_sort_cmd Make_dir_(Io_url v) {return this;} // noop
- public void Sort_bgn() {
- db_mgr = wiki.Db_mgr_as_sql();
- boolean created = false;
- 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.Core_data_mgr().Dbs__add_new(Xowd_db_file_.Tid_search);
- created = true;
- }
- conn = search_db.Conn();
- if (created) {
- Xodb_search_title_word_tbl.Create_table(conn);
- Xodb_search_title_page_tbl.Create_table(conn);
- }
- conn.Txn_mgr().Txn_bgn_if_none();
- stmt_word = Xodb_search_title_word_tbl.Insert_stmt(conn);
- stmt_page = Xodb_search_title_page_tbl.Insert_stmt(conn);
- } private Db_conn conn; private int search_id = 0; private Db_stmt stmt_word, stmt_page;
- public byte Line_dlm() {return line_dlm;} public Xob_search_sql_wkr Line_dlm_(byte v) {line_dlm = v; return this;} private byte line_dlm = Byte_ascii.Nil;
- private byte[] prv_word = Bry_.Empty;
- public void Sort_do(Io_line_rdr rdr) {
- if (line_dlm == Byte_ascii.Nil) line_dlm = rdr.Line_dlm();
- byte[] bry = rdr.Bfr();
- byte[] cur_word = Bry_.Mid(bry, rdr.Key_pos_bgn(), rdr.Key_pos_end());
- if (!Bry_.Eq(cur_word, prv_word)) {
- Xodb_search_title_word_tbl.Insert(stmt_word, ++search_id, cur_word);
- prv_word = cur_word;
- }
- Xodb_search_title_page_tbl.Insert(stmt_page, search_id, Base85_utl.XtoIntByAry(bry, rdr.Key_pos_end() + 1, rdr.Key_pos_end() + 5)); // -1: ignore rdr_dlm
- }
- public void Sort_end() {
- conn.Txn_mgr().Txn_end_all();
- Xodb_tbl_search_title_temp.Cleanup(usr_dlg, conn);
- }
-}
-class Xodb_tbl_search_title_temp {
- public Xodb_tbl_search_title_temp Create_table(Db_conn p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql); return this;}
- public void Make_data(Gfo_usr_dlg usr_dlg, Db_conn p) {
- Xodb_search_title_word_tbl.Create_table(p);
- Xodb_search_title_page_tbl.Create_table(p);
- p.Txn_mgr().Txn_end_all_bgn_if_none();
- Sqlite_engine_.Idx_create(usr_dlg, p, "search_title_temp", Idx_main);
- p.Txn_mgr().Txn_end_all_bgn_if_none();
- p.Exec_sql(Sql_create_word);
- p.Txn_mgr().Txn_end_all_bgn_if_none();
- p.Exec_sql(Sql_create_link);
- p.Txn_mgr().Txn_end_all_bgn_if_none();
- Cleanup(usr_dlg, p);
- p.Txn_mgr().Txn_end_all_bgn_if_none();
- p.Txn_mgr().Txn_end(); // must end all transactions before vacuum
- p.Exec_sql("VACUUM;");
- }
- public static void Cleanup(Gfo_usr_dlg usr_dlg, Db_conn p) {
- p.Exec_sql("DROP TABLE IF EXISTS search_title_temp;");
- try {
- Xodb_search_title_word_tbl.Create_index(usr_dlg, p);
- } catch (Exception e) {
- usr_dlg.Warn_many("", "", "failed to create unique index for search title word: err=~{0}", Err_.Message_gplx_brief(e));
- }
- try {
- Xodb_search_title_page_tbl.Create_index_unique(usr_dlg, p);
- } catch (Exception e) {
- usr_dlg.Warn_many("", "", "failed to create unique index: err=~{0}", Err_.Message_gplx_brief(e));
- Xodb_search_title_page_tbl.Create_index_non_unique(usr_dlg, p);
- }
- }
- public Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_stt_page_id, Fld_stt_word);}
- public void Insert(Db_stmt stmt, int page_id, byte[] word) {
- stmt.Clear()
- .Val_int(page_id)
- .Val_bry_as_str(word)
- .Exec_insert();
- }
- public static final String Tbl_name = "search_title_temp", Fld_stt_page_id = "stt_page_id", Fld_stt_word = "stt_word";
- public static final Db_idx_itm Idx_main = Db_idx_itm.sql_("CREATE UNIQUE INDEX IF NOT EXISTS search_title_temp__main ON search_title_temp (stt_word, stt_page_id);");
- private static final String Tbl_sql = String_.Concat_lines_nl
- ( "CREATE TABLE IF NOT EXISTS search_title_temp"
- , "( stt_id integer NOT NULL PRIMARY KEY AUTOINCREMENT"
- , ", stt_word varchar(255) NOT NULL"
- , ", stt_page_id integer NOT NULL"
- , ");"
- );
- private static final String Sql_create_word = String_.Concat_lines_nl
- ( "INSERT INTO search_title_word (stw_word_id, stw_word)"
- , "SELECT stt_id"
- , ", stt_word"
- , "FROM search_title_temp"
- , "GROUP BY "
- , " stt_word"
- , ";"
- );
- private static final String Sql_create_link = String_.Concat_lines_nl
- ( "INSERT INTO search_title_page (stp_word_id, stp_page_id)"
- , "SELECT stw.stw_word_id"
- , ", stt.stt_page_id"
- , "FROM search_title_temp stt"
- , " JOIN search_title_word stw ON stt.stt_word = stw.stw_word"
- , ";"
- );
-}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql_make.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql_make.java
deleted file mode 100644
index b2d23cab5..000000000
--- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql_make.java
+++ /dev/null
@@ -1,162 +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 .
-*/
-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;
- public Xob_categorylinks_sql_make(Sql_file_parser sql_parser, Xowe_wiki wiki, Db_idx_mode idx_mode) {
- this.wiki = wiki; this.sql_parser = sql_parser; this.idx_mode = idx_mode;
- }
- public Io_sort_cmd Make_dir_(Io_url v) {return this;}
- public void Sort_bgn() {
- usr_dlg = wiki.Appe().Usr_dlg();
- db_mgr = Xodb_mgr_sql.Get_or_load(wiki);
- 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(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.Dbs__add_new(Xowd_db_file_.Tid_category);
- fsys_mgr.Conn_ctg_(category_file);
- }
-
- 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;
- if (idx_mode.Tid_is_bgn()) Idx_create(fsys_mgr);
- } Db_conn cl_provider, cat_provider; Gfo_fld_rdr fld_rdr = Gfo_fld_rdr.xowa_(); Db_stmt cl_stmt = Db_stmt_.Null, ctg_stmt = Db_stmt_.Null; int row_count = 0; Gfo_usr_dlg usr_dlg; boolean first_provider;
- int[] cur_cat_counts = new int[Xoa_ctg_mgr.Tid__max]; long cur_cat_file_size, cur_cat_file_max; byte[] cur_cat_ttl = Ttl_first; int cur_cat_id; int cur_cat_file_idx;
- public byte Line_dlm() {return line_dlm;} public Xob_categorylinks_sql_make Line_dlm_(byte v) {line_dlm = v; return this;} private byte line_dlm = Byte_ascii.Nil;
- public void Sort_do(Io_line_rdr rdr) {
- byte[] ctg_name = Bry_.Empty;
- try {
- if (line_dlm == Byte_ascii.Nil) line_dlm = rdr.Line_dlm();
- fld_rdr.Ini(rdr.Bfr(), rdr.Itm_pos_bgn());
- ctg_name = fld_rdr.Read_bry_escape();
- if (!Bry_.Eq(ctg_name, cur_cat_ttl)) cur_cat_id = Ctg_grp_end(ctg_name);
- if (cur_cat_id == Cur_cat_id_null) return;
- byte ctg_tid = Ctg_tid_ltr_to_byte(fld_rdr.Read_byte());
- byte[] ctg_sortkey = fld_rdr.Read_bry_escape();
- int page_id = fld_rdr.Read_int_base85_len5();
- int ctg_added = fld_rdr.Read_int_base85_len5();
- db_mgr.Tbl_categorylinks().Insert(cl_stmt, page_id, cur_cat_id, ctg_sortkey, ctg_added, ctg_tid);
- cur_cat_file_size += 34 + 20 + 12 + (ctg_sortkey.length * 2); // see NOTE_1: categorylinks row size
- ++cur_cat_counts[ctg_tid];
- ++row_count;
- if (row_count % 100000 == 0) usr_dlg.Prog_one("", "", "inserting category row: ~{0}", row_count);
- if (row_count % 1000000 == 0) cl_provider.Txn_mgr().Txn_end_all_bgn_if_none();
- } 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() {
- Xowe_core_data_mgr core_data_mgr = db_mgr.Core_data_mgr();
- Ctg_grp_end(Ttl_last);
- File_close();
- 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(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(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.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(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();
- cur_cat_file_idx = file.Id();
- }
- private void File_close() {
- cl_provider.Txn_mgr().Txn_end_all();
- if (first_provider) {
- cat_provider.Txn_mgr().Txn_bgn_if_none();
- }
- cl_stmt.Rls();
- cur_cat_file_size = 0;
- }
- private static byte Ctg_tid_ltr_to_byte(byte ltr) {
- switch (ltr) {
- case Byte_ascii.Ltr_f: return Xoa_ctg_mgr.Tid_file;
- case Byte_ascii.Ltr_p: return Xoa_ctg_mgr.Tid_page;
- case Byte_ascii.Ltr_c: return Xoa_ctg_mgr.Tid_subc;
- default: throw Err_.unhandled(ltr);
- }
- }
- static final int Size_categorylinks_row_fixed = 4 + 14 + 2; // page_id + ctg_added + ctg_tid
- static final int Cur_cat_id_null = -1;
- int Cur_cat_id_find(byte[] ttl) {
- while (true) {
- int compare = Bry_.Compare(ttl, 0, ttl.length, name_id_rdr.Bfr(), name_id_rdr.Key_pos_bgn(), name_id_rdr.Key_pos_end());
- switch (compare) {
- case CompareAble_.Same: return Base85_utl.XtoIntByAry(name_id_rdr.Bfr(), name_id_rdr.Key_pos_end() + 1, name_id_rdr.Itm_pos_end() - 2);
- case CompareAble_.More:
- boolean reading = name_id_rdr.Read_next();
- if (!reading) return Cur_cat_id_null; // eof return
- break;
- case CompareAble_.Less: return Cur_cat_id_null; // stop
- }
- }
- }
- private static Io_line_rdr New_registry_rdr(Xowe_wiki wiki, Gfo_usr_dlg usr_dlg) {
- Io_url make_dir = Xob_category_registry_sql.Get_dir_output(wiki);
- usr_dlg.Prog_many("", "", "loading category_registry files: ~{0}", make_dir.Raw());
- Io_url[] urls = Io_mgr._.QueryDir_args(make_dir).ExecAsUrlAry();
- return new Io_line_rdr(usr_dlg, urls).Key_gen_(Io_line_rdr_key_gen_.first_pipe);
- } Io_line_rdr name_id_rdr;
- private static final byte[] Ttl_last = null, Ttl_first = Bry_.Empty;
- private static final Db_idx_itm
- Idx_categorylinks_main = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS categorylinks__cl_main ON categorylinks (cl_to_id, cl_type_id, cl_sortkey, cl_from);")
- , Idx_categorylinks_from = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS categorylinks__cl_from ON categorylinks (cl_from);")
- ;
-}
-/*
-NOTE_1: categorylinks row size: 34 + 20 + 12 + (ctg_sortkey.length * 2)
-row length (data) : 34=8+4+4+14+4 ROWID, cl_from, cl_to_id, cl_timestamp, cl_type_id
-cl_main length (idx) : 20=8+4+4+4 ROWID, cl_from, cl_to_id, cl_type_id
-cl_from length (idx) : 12=8+4 ROWID, cl_from
-variable_data length : ctg_sortkey.length * 2 sortkey is used for row and cl_main
-
-Note the following
-. ints are 4 bytes
-. tinyint is assumed to be 4 bytes (should be 1, but sqlite only has one numeric datatype, so import all 4?)
-. varchar(14) is assumed to be 14 bytes (should be 15? +1 for length of varchar?)
-. calculations work out "too well". comparing 4 databases gets +/- .25 bytes per row. however
-.. - bytes should not be possible
-.. +.25 bytes is too low (18 MB out of 5.5 GB).*; there must be other bytes used for page breaks / fragmentation
-*/
diff --git a/400_xowa/src/gplx/xowa/bldrs/infos/Xob_info_file.java b/400_xowa/src/gplx/xowa/bldrs/infos/Xob_info_file.java
new file mode 100644
index 000000000..7f704a7d0
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/bldrs/infos/Xob_info_file.java
@@ -0,0 +1,70 @@
+/*
+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 .
+*/
+package gplx.xowa.bldrs.infos; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+import gplx.dbs.*; import gplx.dbs.cfgs.*;
+public class Xob_info_file {
+ public Xob_info_file(int id, String type, String ns_ids, int part_id, Guid_adp guid, int schema_version, String core_file_name, String orig_file_name) {
+ this.id = id; this.type = type; this.ns_ids = ns_ids; this.part_id = part_id; this.guid = guid;
+ this.schema_version = schema_version; this.core_file_name = core_file_name; this.orig_file_name = orig_file_name;
+ }
+ public int Id() {return id;} private final int id;
+ public String Type() {return type;} private final String type;
+ public String Ns_ids() {return ns_ids;} private final String ns_ids;
+ public int Part_id() {return part_id;} private final int part_id;
+ public Guid_adp Guid() {return guid;} private final Guid_adp guid;
+ public int Schema_version() {return schema_version;} private final int schema_version;
+ public String Core_file_name() {return core_file_name;} private final String core_file_name;
+ public String Orig_file_name() {return orig_file_name;} private final String orig_file_name;
+ public void Save(Db_cfg_tbl tbl) {
+ tbl.Conn().Txn_bgn();
+ tbl.Insert_int (Cfg_grp, Cfg_key__id , id);
+ tbl.Insert_str (Cfg_grp, Cfg_key__type , type);
+ tbl.Insert_str (Cfg_grp, Cfg_key__ns_ids , ns_ids);
+ tbl.Insert_int (Cfg_grp, Cfg_key__part_id , part_id);
+ tbl.Insert_guid (Cfg_grp, Cfg_key__guid , guid);
+ tbl.Insert_int (Cfg_grp, Cfg_key__schema_version , schema_version);
+ tbl.Insert_str (Cfg_grp, Cfg_key__core_file_name , core_file_name);
+ tbl.Insert_str (Cfg_grp, Cfg_key__orig_file_name , orig_file_name);
+ tbl.Conn().Txn_end();
+ }
+ public static Xob_info_file Load(Db_cfg_tbl tbl) {
+ Db_cfg_hash hash = tbl.Select_as_hash(Cfg_grp);
+ return new Xob_info_file
+ ( hash.Get(Cfg_key__id ).To_int_or(-1)
+ , hash.Get(Cfg_key__type ).To_str_or("unknown")
+ , hash.Get(Cfg_key__ns_ids ).To_str_or("")
+ , hash.Get(Cfg_key__part_id ).To_int_or(-1)
+ , hash.Get(Cfg_key__guid ).To_guid_or(Guid_adp_.Empty)
+ , hash.Get(Cfg_key__schema_version ).To_int_or(2)
+ , hash.Get(Cfg_key__core_file_name ).To_str_or("")
+ , hash.Get(Cfg_key__orig_file_name ).To_str_or("")
+ );
+ }
+ private static final String Cfg_grp = gplx.xowa.wikis.Xow_cfg_consts.Grp__bldr_db
+ , Cfg_key__id = "id" // EX: 1
+ , Cfg_key__type = "type" // EX: core
+ , Cfg_key__ns_ids = "ns_ids" // EX: 0
+ , Cfg_key__part_id = "part_id" // EX: 0
+ , Cfg_key__guid = "guid" // EX: 00000000-0000-0000-0000-000000000000
+ , Cfg_key__schema_version = "schema_version" // EX: 2
+ , Cfg_key__core_file_name = "core_file_name" // EX: en.wikipedia.org-text.xowa
+ , Cfg_key__orig_file_name = "orig_file_name" // EX: en.wikipedia.org-text-ns.000-db.002.xowa
+ ;
+ public static final String Ns_ids_empty = "";
+ public static final int Part_id_1st = 1;
+}
diff --git a/400_xowa/src/gplx/xowa/bldrs/infos/Xob_info_session.java b/400_xowa/src/gplx/xowa/bldrs/infos/Xob_info_session.java
new file mode 100644
index 000000000..676985b93
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/bldrs/infos/Xob_info_session.java
@@ -0,0 +1,61 @@
+/*
+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 .
+*/
+package gplx.xowa.bldrs.infos; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+import gplx.dbs.cfgs.*;
+public class Xob_info_session {
+ Xob_info_session(String user, String version, String wiki_domain, String dump_name, DateAdp time, Guid_adp guid) {
+ this.user = user; this.version = version; this.wiki_domain = wiki_domain; this.dump_name = dump_name; this.time = time; this.guid = guid;
+ }
+ public String User() {return user;} private final String user;
+ public String Version() {return version;} private final String version;
+ public String Wiki_domain() {return wiki_domain;} private final String wiki_domain;
+ public String Dump_name() {return dump_name;} private final String dump_name;
+ public DateAdp Time() {return time;} private final DateAdp time;
+ public Guid_adp Uuid() {return guid;} private final Guid_adp guid;
+ public void Save(Db_cfg_tbl tbl) {
+ tbl.Conn().Txn_bgn();
+ tbl.Insert_str (Cfg_grp, Cfg_key__user , user);
+ tbl.Insert_str (Cfg_grp, Cfg_key__version , version);
+ tbl.Insert_str (Cfg_grp, Cfg_key__wiki_domain , wiki_domain);
+ tbl.Insert_str (Cfg_grp, Cfg_key__dump_name , dump_name);
+ tbl.Insert_date (Cfg_grp, Cfg_key__time , time);
+ tbl.Insert_guid (Cfg_grp, Cfg_key__guid , guid);
+ tbl.Conn().Txn_end();
+ }
+ public static Xob_info_session Load(Db_cfg_tbl tbl) {
+ Db_cfg_hash hash = tbl.Select_as_hash(Cfg_grp);
+ return new Xob_info_session
+ ( hash.Get(Cfg_key__user).To_str_or("")
+ , hash.Get(Cfg_key__version).To_str_or("")
+ , hash.Get(Cfg_key__wiki_domain).To_str_or("")
+ , hash.Get(Cfg_key__dump_name).To_str_or("")
+ , hash.Get(Cfg_key__time).To_date_or(DateAdp_.MinValue)
+ , hash.Get(Cfg_key__guid).To_guid_or(Guid_adp_.Empty)
+ );
+ }
+ private static final String Cfg_grp = gplx.xowa.wikis.Xow_cfg_consts.Grp__bldr_session
+ , Cfg_key__user = "user" // EX: anonymous
+ , Cfg_key__version = "version" // EX: 2.3.1.4
+ , Cfg_key__wiki_domain = "wiki_domain" // EX: en.wikipedia.org
+ , Cfg_key__dump_name = "dump_name" // EX: enwiki-latest-pages-articles
+ , Cfg_key__time = "time" // EX: 20150102 030405
+ , Cfg_key__guid = "guid" // EX: 00000000-0000-0000-0000-000000000000
+ ;
+ public static Xob_info_session new_(String user, String wiki_domain, String dump_name) {return new Xob_info_session(user, Xoa_app_.Version, wiki_domain, dump_name, DateAdp_.Now(), Guid_adp_.random_());}
+ public static final Xob_info_session Test = new_("anonymous", "en.wikipedia.org", "enwiki-latest-pages-articles");
+}
diff --git a/400_xowa/src/gplx/xowa/bldrs/langs/Xobc_utl_make_lang.java b/400_xowa/src/gplx/xowa/bldrs/langs/Xobc_utl_make_lang.java
index a428b28d0..48f76eb4d 100644
--- a/400_xowa/src/gplx/xowa/bldrs/langs/Xobc_utl_make_lang.java
+++ b/400_xowa/src/gplx/xowa/bldrs/langs/Xobc_utl_make_lang.java
@@ -32,7 +32,7 @@ public class Xobc_utl_make_lang implements GfoInvkAble {
lang_parser.Parse_mediawiki(lang_mgr, lang_root.GenSubDir("mediawiki"), kwd_mgr);
kwd_mgr.Add_words();
lang_parser.Save_langs(lang_mgr, lang_root.GenSubDir(Xol_mw_lang_parser.Dir_name_core), manual_text_bgn_hash, manual_text_end_hash);
- Gfo_usr_dlg_._.Prog_many("", "", "done");
+ Gfo_usr_dlg_.I.Prog_many("", "", "done");
}
public void Parse_manual_text(byte[] langs_bry, byte[] text, OrderedHash manual_text) {
OrderedHash langs = lang_mgr.Xto_hash(langs_bry);
diff --git a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_parse_all_src.java b/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_parse_all_src.java
deleted file mode 100644
index 2784bde3f..000000000
--- a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_parse_all_src.java
+++ /dev/null
@@ -1,21 +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 .
-*/
-package gplx.xowa.bldrs.oimgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-interface Xob_parse_all_db {
- void Fetch_next(OrderedHash list, int ns_id, byte[] ttl);
-}
diff --git a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_text_db_prep.java b/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_text_db_prep.java
deleted file mode 100644
index 6f016ca45..000000000
--- a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_text_db_prep.java
+++ /dev/null
@@ -1,79 +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 .
-*/
-package gplx.xowa.bldrs.oimgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-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 {
- 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) {}
- public void Cmd_bgn(Xob_bldr bldr) {
- wiki.Init_assert();
- }
- public void Cmd_run() {
- 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++) {
- 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() {
- 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++) {
- Xowd_db_file db_file = core_data_mgr.Dbs__get_at(i);
- if (db_file.Tid() == Xowd_db_file_.Tid_text)
- db_file.Rls();
- }
- }
- public void Cmd_print() {}
- 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);
- Sqlite_engine_.Db_attach(conn, "page_db", page_db_url);
- conn.Txn_mgr().Txn_bgn_if_none();
- conn.Exec_sql(String_.Format(Sql_insert_data, text_db.Id()));
- conn.Txn_mgr().Txn_end_all();
- Sqlite_engine_.Idx_create(conn, Idx_create);
- }
- private static final String Sql_create_tbl = String_.Concat_lines_nl
- ( "CREATE TABLE IF NOT EXISTS page_dump"
- , "( page_id integer"
- , ", page_title varchar(256)"
- , ", page_namespace integer"
- , ", page_is_redirect integer"
- , ");"
- )
- , Sql_insert_data = String_.Concat_lines_nl
- ( "INSERT INTO page_dump (page_id, page_title, page_namespace, page_is_redirect)"
- , "SELECT p.page_id"
- , ", p.page_title"
- , ", p.page_namespace"
- , ", p.page_is_redirect"
- , "FROM page_db.page p"
- , "WHERE p.page_file_idx = {0}"
- , ";"
- )
- ;
- private static final Db_idx_itm Idx_create = Db_idx_itm.sql_
- ( "CREATE UNIQUE INDEX page_dump_index ON page_dump (page_id, page_namespace, page_is_redirect, page_title);"
- );
-}
diff --git a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xodb_db_file.java b/400_xowa/src/gplx/xowa/bldrs/oimgs/Xodb_db_file.java
deleted file mode 100644
index 6a6952023..000000000
--- a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xodb_db_file.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-XOWA: the XOWA Offline Wiki Application
-Copyright (C) 2012 gnosygnu@gmail.com
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU Affero General Public License as
-published by the Free Software Foundation, either version 3 of the
-License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU Affero General Public License for more details.
-
-You should have received a copy of the GNU Affero General Public License
-along with this program. If not, see .
-*/
-package gplx.xowa.bldrs.oimgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.core.primitives.*;
-import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*;
-public class Xodb_db_file {
- Xodb_db_file(Io_url url, Db_conn conn, boolean created) {this.url = url; this.conn = conn; this.created = created;}
- public Io_url Url() {return url;} private Io_url url;
- public Db_conn Conn() {return conn;} private Db_conn conn;
- public boolean Created() {return created;} public void Created_clear() {created = false;} private boolean created;
-
- public static Xodb_db_file init__file_make(Io_url dir) {return init_(dir, Name__file_make);}
- public static Xodb_db_file init__page_regy(Io_url dir) {return init_(dir, Name__page_regy);}
- public static Xodb_db_file init__wiki_image(Io_url dir) {return init_(dir, Name__wiki_image);}
- public static Xodb_db_file init__wiki_redirect(Io_url dir) {return init_(dir, Name__wiki_redirect);}
- public static Xodb_db_file init__temp_log(Io_url dir) {return init_(dir, Name__temp_log);}
- public static Xodb_db_file init_(Io_url dir, String name) {
- Io_url url = dir.GenSubFil(name);
- Bool_obj_ref created = Bool_obj_ref.n_();
- Db_conn conn = Sqlite_engine_.Conn_load_or_make_(url, created);
- if (created.Val()) { // always create cfg table
- Xodb_xowa_cfg_tbl.Create_table(conn);
- Xodb_xowa_cfg_tbl.Create_index(conn);
- }
- return new Xodb_db_file(url, conn, created.Val());
- }
- public static final String
- Name__wiki_image = "xowa.wiki.image.sqlite3", Name__wiki_redirect = "xowa.wiki.redirect.sqlite3"
- , Name__file_make = "xowa.file.make.sqlite3", Name__temp_log = "xowa.temp.log.sqlite3"
- , Name__page_regy = "xowa.file.page_regy.sqlite3"
- ;
-}
diff --git a/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_wiki_image_itm.java b/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_wiki_image_itm.java
deleted file mode 100644
index 4f364d184..000000000
--- a/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_wiki_image_itm.java
+++ /dev/null
@@ -1,26 +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 .
-*/
-package gplx.xowa.bldrs.wikis.images; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wikis.*;
-public class Xob_wiki_image_itm {
- public byte[] Name() {return name;} public void Name_(byte[] v) {this.name = v;} byte[] name;
- public int Size() {return size;} public void Size_(int v) {this.size = v;} int size;
- public int Width() {return width;} public void Width_(int v) {this.width = v;} int width;
- public int Height() {return height;} public void Height_(int v) {this.height = v;} int height;
- public byte Bits() {return bits;} public void Bits_(byte v) {this.bits = v;} byte bits;
- public static final Xob_wiki_image_itm Null = new Xob_wiki_image_itm();
-}
diff --git a/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_wiki_image_sql_fxt.java b/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_wiki_image_sql_fxt.java
deleted file mode 100644
index cb59317fb..000000000
--- a/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_wiki_image_sql_fxt.java
+++ /dev/null
@@ -1,41 +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 .
-*/
-package gplx.xowa.bldrs.wikis.images; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wikis.*;
-public class Xob_wiki_image_sql_fxt {
- Xob_wiki_image_sql cmd;
- private Db_mgr_fxt fxt = new Db_mgr_fxt();
- public void Init() {
- fxt.Ctor_fsys();
- fxt.Init_db_sqlite();
- }
- public void Term() {
- fxt.Rls();
- }
- public Xob_wiki_image_sql Run(String raw_sql) {return Run(raw_sql, new Xob_wiki_image_sql(fxt.Bldr(), fxt.Wiki()));}
- public Xob_wiki_image_sql Run(String raw_sql, Xob_wiki_image_sql rv) {
- this.cmd = rv;
- cmd.Make_fil_len_(Io_mgr.Len_kb);
- rv.Parser().Src_len_(Io_mgr.Len_kb);
- Io_url src_fil = Io_url_.mem_fil_("mem/temp/sql_dump.sql");
- Io_mgr._.SaveFilStr(src_fil, raw_sql);
-
- rv.Src_fil_(src_fil);
- Xob_base_fxt.Run_cmd(fxt.Bldr(), rv);
- return rv;
- }
-}
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_import_cfg.java b/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_import_cfg.java
similarity index 81%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/Xob_import_cfg.java
rename to 400_xowa/src/gplx/xowa/bldrs/xmls/Xob_import_cfg.java
index 6123fe3e6..4e77196a4 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_import_cfg.java
+++ b/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_import_cfg.java
@@ -15,13 +15,15 @@ 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 .
*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+package gplx.xowa.bldrs.xmls; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
import gplx.ios.*;
import gplx.xowa.ctgs.*; import gplx.xowa.tdbs.*;
public class Xob_import_cfg {
public Xob_import_cfg(Xowe_wiki wiki) {this.wiki = wiki;} private Xowe_wiki wiki; private boolean src_fil_is_bz2 = true;
public byte Category_version() {return category_version;} public Xob_import_cfg Category_version_(byte v) {category_version = v; return this;} private byte category_version = Xoa_ctg_mgr.Version_1;
+ public long Src_rdr_len() {return src_rdr_len;} private long src_rdr_len;
public Io_url Src_fil_xml() {return src_fil_xml;}
+ public Io_url Src_fil() {return src_fil;} private Io_url src_fil;
public Xob_import_cfg Src_fil_xml_(Io_url v) {src_fil_xml = v; src_fil_is_bz2 = Bool_.N; return this;} private Io_url src_fil_xml;
public Xob_import_cfg Src_fil_bz2_(Io_url v) {src_fil_bz2 = v; src_fil_is_bz2 = Bool_.Y; return this;} private Io_url src_fil_bz2;
public Io_url Src_dir() {
@@ -30,25 +32,27 @@ public class Xob_import_cfg {
else if (src_fil_bz2 != null) return src_fil_bz2.OwnerDir();
else throw Err_.new_("unknown src dir");
}
- public gplx.ios.Io_stream_rdr Src_rdr() {
+ public Io_stream_rdr Src_rdr() {
if (src_fil_xml == null && src_fil_bz2 == null) { // will usually be null; non-null when user specifies src through command-line
Io_url url = Xotdb_fsys_mgr.Find_file_or_fail(wiki.Fsys_mgr().Root_dir(), "*", ".xml", ".bz2");
if (String_.Eq(url.Ext(), ".xml")) Src_fil_xml_(url);
else Src_fil_bz2_(url);
}
if (src_fil_is_bz2) {
- Chk_file_ext(wiki.Appe(), src_fil_bz2, ".bz2", "xml");
+ Chk_file_ext(wiki.Appe(), src_fil_bz2, ".bz2", "xml");
+ src_fil = src_fil_bz2; src_rdr_len = Io_mgr._.QueryFil(src_fil_bz2).Size();
Xoae_app app = wiki.Appe();
if (app.Setup_mgr().Dump_mgr().Import_bz2_by_stdout()) {
ProcessAdp process = app.Prog_mgr().App_decompress_bz2_by_stdout();
return Io_stream_rdr_process.new_(process.Exe_url(), src_fil_bz2, process.Xto_process_bldr_args(src_fil_bz2.Raw()));
}
else
- return gplx.ios.Io_stream_rdr_.bzip2_(src_fil_bz2);
+ return Io_stream_rdr_.bzip2_(src_fil_bz2);
}
else {
Chk_file_ext(wiki.Appe(), src_fil_xml, ".xml", "bz2");
- return gplx.ios.Io_stream_rdr_.file_(src_fil_xml);
+ src_fil = src_fil_xml; src_rdr_len = Io_mgr._.QueryFil(src_fil_xml).Size();
+ return Io_stream_rdr_.file_(src_fil_xml);
}
}
private static void Chk_file_ext(Xoae_app app, Io_url fil, String expd_ext, String alt_ext) {
diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_import_marker.java b/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_import_marker.java
similarity index 53%
rename from 400_xowa/src/gplx/xowa/bldrs/imports/Xob_import_marker.java
rename to 400_xowa/src/gplx/xowa/bldrs/xmls/Xob_import_marker.java
index 3c46e7647..9dcd6f743 100644
--- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_import_marker.java
+++ b/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_import_marker.java
@@ -15,12 +15,21 @@ 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 .
*/
-package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.gfui.*;
+package gplx.xowa.bldrs.xmls; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
+import gplx.gfui.*; import gplx.xowa.bldrs.cmds.utils.*;
public class Xob_import_marker {
- public static void Import_bgn(Xowe_wiki wiki) {Io_mgr._.SaveFilStr(url_(wiki), "XOWA has created this file to indicate that an import is in progress. This file will be deleted once the import is completed.");}
- public static void Import_end(Xowe_wiki wiki) {Io_mgr._.DeleteFil_args(url_(wiki)).MissingFails_off().Exec();}
- public static boolean Check(Xowe_wiki wiki) {
+ private final Hash_adp_bry in_progress_hash = Hash_adp_bry.cs_();
+ public void Bgn(Xowe_wiki wiki) {
+ in_progress_hash.AddKeyVal(wiki.Domain_bry());
+ Io_mgr._.SaveFilStr(url_(wiki), "XOWA has created this file to indicate that an import is in progress. This file will be deleted once the import is completed.");
+ }
+ public void End(Xowe_wiki wiki) {
+ in_progress_hash.Del(wiki.Domain_bry());
+ Io_mgr._.DeleteFil_args(url_(wiki)).MissingFails_off().Exec();
+ }
+ public boolean Chk(Xowe_wiki wiki) {
+ if (Xoa_app_.Mode != Xoa_app_.Mode_gui) return true; // NOTE: ignore during Server / Console modes; DATE:2015-04-01
+ if (in_progress_hash.Has(wiki.Domain_bry())) return true; // NOTE: ignore if currently building; different bldr commands call wiki.Init_assert() which may lead to fals checks;
Io_url url = url_(wiki);
if (!Io_mgr._.ExistsFil(url)) return true;
Xoae_app app = wiki.Appe();
@@ -28,9 +37,9 @@ public class Xob_import_marker {
byte[] incompete_msg_bry = app.User().Msg_mgr().Val_by_key_args(Bry_.new_ascii_("api-xowa.import.core.incomplete"), wiki.Domain_str());
int rslt = app.Gui_mgr().Kit().Ask_yes_no_cancel("", "", String_.new_utf8_(incompete_msg_bry));
switch (rslt) {
- case Gfui_dlg_msg_.Btn_yes: Xobc_core_cleanup.Delete_wiki_sql(wiki); Import_end(wiki); return false; // delete wiki
- case Gfui_dlg_msg_.Btn_no: Import_end(wiki); return true; // delete marker
- case Gfui_dlg_msg_.Btn_cancel: return true; // noop
+ case Gfui_dlg_msg_.Btn_yes: Xob_cleanup_cmd.Delete_wiki_sql(wiki); End(wiki); return false; // delete wiki
+ case Gfui_dlg_msg_.Btn_no: End(wiki); return true; // delete marker
+ case Gfui_dlg_msg_.Btn_cancel: return true; // noop
default: throw Err_.unhandled(rslt);
}
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_page_bldr.java b/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_page_bldr.java
index a9c7f3339..dd2e529d0 100644
--- a/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_page_bldr.java
+++ b/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_page_bldr.java
@@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.bldrs.xmls; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.ios.*;
+import gplx.ios.*; import gplx.xowa.wikis.data.tbls.*;
public class Xob_xml_page_bldr {
public byte[] Xto_bry() {return bfr.Xto_bry_and_clear();}
public Io_buffer_rdr XtoByteStreamRdr() {return XtoByteStreamRdr(Io_mgr.Len_kb);}
@@ -32,12 +32,12 @@ public class Xob_xml_page_bldr {
bfr.Add_str(all);
return this;
}
- public Xob_xml_page_bldr Add_ary(Xodb_page... ary) {
- for (Xodb_page doc : ary)
+ public Xob_xml_page_bldr Add_ary(Xowd_page_itm... ary) {
+ for (Xowd_page_itm doc : ary)
Add(doc);
return this;
}
- public Xob_xml_page_bldr Add(Xodb_page doc) {
+ public Xob_xml_page_bldr Add(Xowd_page_itm doc) {
bfr.Add(Indent_2).Add(Xob_xml_parser_.Bry_page_bgn).Add_byte_nl();
bfr.Add(Indent_4).Add(Xob_xml_parser_.Bry_title_bgn).Add(doc.Ttl_full_db()).Add(Xob_xml_parser_.Bry_title_end).Add_byte_nl();
bfr.Add(Indent_4).Add(Xob_xml_parser_.Bry_id_bgn).Add_int_variable(doc.Id()).Add(Xob_xml_parser_.Bry_id_end).Add_byte_nl();
@@ -51,7 +51,7 @@ public class Xob_xml_page_bldr {
bfr.Add(Indent_6).Add(Xob_xml_parser_.Bry_contributor_end).Add_byte_nl();
bfr.Add(Indent_6).Add(Xob_xml_parser_.Bry_minor_bgn_frag).Add(Nde_inline).Add_byte_nl();
bfr.Add(Indent_6).Add(Xob_xml_parser_.Bry_comment_bgn).Add(Revision_comment).Add(Xob_xml_parser_.Bry_comment_end).Add_byte_nl();
- bfr.Add(Indent_6).Add(Xob_xml_parser_.Bry_text_bgn).Add(doc.Wtxt()).Add(Xob_xml_parser_.Bry_text_end).Add_byte_nl();
+ bfr.Add(Indent_6).Add(Xob_xml_parser_.Bry_text_bgn).Add(doc.Text()).Add(Xob_xml_parser_.Bry_text_end).Add_byte_nl();
bfr.Add(Indent_4).Add(Xob_xml_parser_.Bry_revision_end).Add_byte_nl();
bfr.Add(Indent_2).Add(Xob_xml_parser_.Bry_page_end).Add_byte_nl();
return this;
diff --git a/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_parser.java b/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_parser.java
index 0a1b38876..f1d45eee6 100644
--- a/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_parser.java
+++ b/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_parser.java
@@ -16,13 +16,13 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.bldrs.xmls; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import gplx.core.btries.*; import gplx.ios.*;
+import gplx.core.btries.*; import gplx.ios.*; import gplx.xowa.wikis.data.tbls.*;
public class Xob_xml_parser {
Btrie_fast_mgr trie = Xob_xml_parser_.trie_(); Bry_bfr data_bfr = Bry_bfr.new_(); DateAdp_parser date_parser = DateAdp_parser.new_();
public Xob_xml_parser Tag_len_max_(int v) {tag_len_max = v; return this;} private int tag_len_max = 255; // max size of any (a) xml tag, (b) int or (c) date; everything else goes into a data_bfr
public Xob_xml_parser Data_bfr_len_(int v) {data_bfr.Resize(v); return this;} // PERF: resize data_bfr once to large size, rather than grow incremently to it
public Xob_xml_parser Trie_tab_del_() {trie.Del(Xob_xml_parser_.Bry_tab); return this;}
- public int Parse_page(Xodb_page rv, Gfo_usr_dlg usr_dlg, Io_buffer_rdr fil, byte[] src, int pos, Xow_ns_mgr ns_mgr) {
+ public int Parse_page(Xowd_page_itm rv, Gfo_usr_dlg usr_dlg, Io_buffer_rdr fil, byte[] src, int pos, Xow_ns_mgr ns_mgr) {
rv.Clear();
int src_len = fil.Bfr_len(), data_bgn = -1, page_bgn = -1;
boolean data_bfr_add = false, page_id_needed = true, title_needed = true, reading = true;
@@ -80,7 +80,7 @@ public class Xob_xml_parser {
title_needed = false;
}
break;
- case Xob_xml_parser_.Id_text_end: data_bfr_add = false; rv.Wtxt_(data_bfr.Xto_bry_and_clear()); break;
+ case Xob_xml_parser_.Id_text_end: data_bfr_add = false; rv.Text_(data_bfr.Xto_bry_and_clear()); break;
case Xob_xml_parser_.Id_amp: case Xob_xml_parser_.Id_quot: case Xob_xml_parser_.Id_lt: case Xob_xml_parser_.Id_gt:
case Xob_xml_parser_.Id_cr_nl: case Xob_xml_parser_.Id_cr:
if (data_bfr_add) data_bfr.Add_byte(itm.Subst_byte());
diff --git a/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_parser_tst.java b/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_parser_tst.java
index 4e670c123..8165cac5c 100644
--- a/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_parser_tst.java
+++ b/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_parser_tst.java
@@ -16,8 +16,7 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.bldrs.xmls; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
-import org.junit.*;
-import gplx.ios.*;
+import org.junit.*; import gplx.ios.*; import gplx.xowa.wikis.data.tbls.*;
public class Xob_xml_parser_tst {
@Before public void init() {
Io_mgr._.InitEngine_mem();
@@ -25,89 +24,89 @@ public class Xob_xml_parser_tst {
bldr = new Xob_bldr(app);
} private Xow_ns_mgr ns_mgr = Xow_ns_mgr_.default_(gplx.xowa.langs.cases.Xol_case_mgr_.Ascii());
@Test public void Basic_docs_1() {
- Xodb_page doc = doc_(1, "a", "a a", Date_1);
+ Xowd_page_itm doc = doc_(1, "a", "a a", Date_1);
fil = page_bldr.Add(doc).XtoByteStreamRdr();
tst_parse(fil, doc, 0);
}
@Test public void Basic_docs_2() {
- Xodb_page doc1 = doc_(1, "a", "a a", Date_1);
- Xodb_page doc2 = doc_(2, "b", "b b", Date_2);
+ Xowd_page_itm doc1 = doc_(1, "a", "a a", Date_1);
+ Xowd_page_itm doc2 = doc_(2, "b", "b b", Date_2);
fil = page_bldr.Add_ary(doc1, doc2).XtoByteStreamRdr();
int pos = tst_parse(fil, doc1, 0);
tst_parse(fil, doc2, pos);
}
@Test public void Basic_space() {
- Xodb_page doc1 = doc_(1, "a_b", "abc", Date_1);
+ Xowd_page_itm doc1 = doc_(1, "a_b", "abc", Date_1);
fil = page_bldr.Add_ary(doc1).Upd("a_b", "a b").XtoByteStreamRdr();
tst_parse(fil, doc1, 0);
}
@Test public void Xml() {
- Xodb_page doc = doc_(1, "a", ""a & b <> a | b"", Date_1);
+ Xowd_page_itm doc = doc_(1, "a", ""a & b <> a | b"", Date_1);
fil = page_bldr.Add(doc).XtoByteStreamRdr();
- tst_parse(fil, doc.Wtxt_(Bry_.new_utf8_("\"a & b <> a | b\"")), 0);
+ tst_parse(fil, doc.Text_(Bry_.new_utf8_("\"a & b <> a | b\"")), 0);
}
@Test public void Tab() {
- Xodb_page doc = doc_(1, "a", "a \t b", Date_1);
+ Xowd_page_itm doc = doc_(1, "a", "a \t b", Date_1);
fil = page_bldr.Add(doc).XtoByteStreamRdr();
- tst_parse(fil, doc.Wtxt_(Bry_.new_utf8_("a b")), 0);
+ tst_parse(fil, doc.Text_(Bry_.new_utf8_("a b")), 0);
}
@Test public void Tab_disable() {
- Xodb_page doc = doc_(1, "a", "a \t b", Date_1);
+ Xowd_page_itm doc = doc_(1, "a", "a \t b", Date_1);
page_parser.Trie_tab_del_();
fil = page_bldr.Add(doc).XtoByteStreamRdr();
- tst_parse(fil, doc.Wtxt_(Bry_.new_utf8_("a \t b")), 0);
+ tst_parse(fil, doc.Text_(Bry_.new_utf8_("a \t b")), 0);
}
@Test public void Cr_nl() {
- Xodb_page doc = doc_(1, "a", "a \r\n b", Date_1);
+ Xowd_page_itm doc = doc_(1, "a", "a \r\n b", Date_1);
fil = page_bldr.Add(doc).XtoByteStreamRdr();
- tst_parse(fil, doc.Wtxt_(Bry_.new_utf8_("a \n b")), 0);
+ tst_parse(fil, doc.Text_(Bry_.new_utf8_("a \n b")), 0);
}
@Test public void Cr() {
- Xodb_page doc = doc_(1, "a", "a \r b", Date_1);
+ Xowd_page_itm doc = doc_(1, "a", "a \r b", Date_1);
fil = page_bldr.Add(doc).XtoByteStreamRdr();
- tst_parse(fil, doc.Wtxt_(Bry_.new_utf8_("a \n b")), 0);
+ tst_parse(fil, doc.Text_(Bry_.new_utf8_("a \n b")), 0);
}
@Test public void Text_long() {
String s = String_.Repeat("a", 1024);
- Xodb_page doc = doc_(1, "a", s, Date_1);
+ Xowd_page_itm doc = doc_(1, "a", s, Date_1);
page_parser.Tag_len_max_(32);
fil = page_bldr.Add(doc).XtoByteStreamRdr(512);
tst_parse(fil, doc, 0);
}
@Test public void Text_empty() {
- Xodb_page doc = doc_(1, "a", "", Date_1);
+ Xowd_page_itm doc = doc_(1, "a", "", Date_1);
fil = page_bldr.Add(doc).Upd("", "").XtoByteStreamRdr();
tst_parse(fil, doc, 0);
}
@Test public void Text_frag() {
- Xodb_page doc = doc_(1, "a", "a", Date_1);
+ Xowd_page_itm doc = doc_(1, "a", "a", Date_1);
fil = page_bldr.Add(doc).Upd("a", "a").XtoByteStreamRdr();
tst_parse(fil, doc, 0);
}
@Test public void Ns_file() {
- Xodb_page doc = doc_(1, "File:a", "a", Date_1);
+ Xowd_page_itm doc = doc_(1, "File:a", "a", Date_1);
Tfds.Eq(Xow_ns_.Id_file, doc.Ns_id());
Tfds.Eq("a", String_.new_utf8_(doc.Ttl_page_db()));
}
@Test public void Ns_main() {
- Xodb_page doc = doc_(1, "a", "a", Date_1);
+ Xowd_page_itm doc = doc_(1, "a", "a", Date_1);
Tfds.Eq(Xow_ns_.Id_main, doc.Ns_id());
Tfds.Eq("a", String_.new_utf8_(doc.Ttl_page_db()));
}
@Test public void Ns_main_book() {
- Xodb_page doc = doc_(1, "Book", "a", Date_1);
+ Xowd_page_itm doc = doc_(1, "Book", "a", Date_1);
Tfds.Eq(Xow_ns_.Id_main, doc.Ns_id());
Tfds.Eq("Book", String_.new_utf8_(doc.Ttl_page_db()));
}
@Test public void XmlEntities() {
- Xodb_page orig = doc_(1, "A&b", "a", Date_1);
- Xodb_page actl = new Xodb_page();
+ Xowd_page_itm orig = doc_(1, "A&b", "a", Date_1);
+ Xowd_page_itm actl = new Xowd_page_itm();
fil = page_bldr.Add(orig).XtoByteStreamRdr();
page_parser.Parse_page(actl, usr_dlg, fil, fil.Bfr(), 0, ns_mgr);
Tfds.Eq("A&b", String_.new_utf8_(actl.Ttl_full_db()));
}
@Test public void Root() {
- Xodb_page doc = doc_(1, "a", "a", Date_1);
+ Xowd_page_itm doc = doc_(1, "a", "a", Date_1);
page_bldr.Bfr().Add_str("\n");
page_bldr.Add(doc);
page_bldr.Bfr().Add_str("");
@@ -118,17 +117,17 @@ public class Xob_xml_parser_tst {
Bry_bfr bfr = Bry_bfr.new_();
Xob_xml_page_bldr page_bldr = new Xob_xml_page_bldr(); Io_buffer_rdr fil; Xob_xml_parser page_parser = new Xob_xml_parser(); Xob_bldr bldr;
Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_base.test_();
- int tst_parse(Io_buffer_rdr fil, Xodb_page expd, int cur_pos) {
- Xodb_page actl = new Xodb_page();
+ int tst_parse(Io_buffer_rdr fil, Xowd_page_itm expd, int cur_pos) {
+ Xowd_page_itm actl = new Xowd_page_itm();
int rv = page_parser.Parse_page(actl, usr_dlg, fil, fil.Bfr(), cur_pos, ns_mgr);
Tfds.Eq(expd.Id(), actl.Id(), "id");
Tfds.Eq(String_.new_utf8_(expd.Ttl_full_db()), String_.new_utf8_(actl.Ttl_full_db()), "title");
- Tfds.Eq(String_.new_utf8_(expd.Wtxt()), String_.new_utf8_(actl.Wtxt()), "text");
+ Tfds.Eq(String_.new_utf8_(expd.Text()), String_.new_utf8_(actl.Text()), "text");
Tfds.Eq_date(expd.Modified_on(), actl.Modified_on(), "timestamp");
return rv;
}
- Xodb_page doc_(int id, String title, String text, String date) {
- Xodb_page rv = new Xodb_page().Id_(id).Ttl_(Bry_.new_ascii_(title), ns_mgr).Wtxt_(Bry_.new_ascii_(text));
+ Xowd_page_itm doc_(int id, String title, String text, String date) {
+ Xowd_page_itm rv = new Xowd_page_itm().Id_(id).Ttl_(Bry_.new_ascii_(title), ns_mgr).Text_(Bry_.new_ascii_(text));
int[] modified_on = new int[7];
dateParser.Parse_iso8651_like(modified_on, date);
rv.Modified_on_(DateAdp_.seg_(modified_on));
diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_all.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_all.java
index 9af00d0d3..e26f5104e 100644
--- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_all.java
+++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_all.java
@@ -111,7 +111,7 @@ class Xoctg_fmtr_all {
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();
+ return bfr.To_bry_and_rls();
}
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__bfr_mkr().Get_b512();
@@ -130,7 +130,7 @@ class Xoctg_fmtr_all {
href_bfr.Add_byte(Byte_ascii.Question).Add(arg_idx_lbl).Add_byte(Byte_ascii.Eq); // filefrom=
href_bfr.Add(arg_sortkey); // Abc
href_bfr.Add_byte(Byte_ascii.Hash).Add(div_id); // #mw-subcategories
- byte[] nav_href = href_bfr.Mkr_rls().Xto_bry_and_clear();
+ byte[] nav_href = href_bfr.To_bry_and_rls();
byte[] nav_ttl = ttl.Full_url();
int nav_text_id = fill_at_bgn ? Xol_msg_itm_.Id_next_results : Xol_msg_itm_.Id_prev_results;
byte[] nav_text = wiki.Msg_mgr().Val_by_id_args(nav_text_id, grp_max); // fill_at_bgn 200 / previous 200
diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_itm.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_itm.java
index 59065508e..342953537 100644
--- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_itm.java
+++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_itm.java
@@ -110,7 +110,7 @@ class Xoctg_fmtr_itm_subc extends Xoctg_fmtr_itm_base {
Bld_contains_text_itm(bfr, Xol_msg_itm_.Id_ctgtree_subc_counts_page, sub_pages);
Bld_contains_text_itm(bfr, Xol_msg_itm_.Id_ctgtree_subc_counts_file, sub_files);
bfr.Add_byte(Byte_ascii.Paren_end);
- return bfr.Mkr_rls().Xto_bry_and_clear();
+ return bfr.To_bry_and_rls();
}
private void Bld_contains_text_itm(Bry_bfr bfr, int msg_id, int val) {
if (val == 0) return;
diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr.java
index 4d4490f32..3505793a8 100644
--- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr.java
+++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr.java
@@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.ctgs; import gplx.*; import gplx.xowa.*;
-import gplx.xowa.dbs.*;
+import gplx.xowa.dbs.*; import gplx.xowa.wikis.data.tbls.*;
public class Xoctg_html_mgr implements GfoInvkAble {
@gplx.Internal protected Xoctg_fmtr_grp Fmtr_grp() {return fmtr_grp;} private Xoctg_fmtr_grp fmtr_grp = new Xoctg_fmtr_grp();
private final Xoctg_fmtr_all mgr_subcs = new Xoctg_fmtr_all(Xoa_ctg_mgr.Tid_subc);
@@ -54,7 +54,7 @@ public class Xoctg_html_mgr implements GfoInvkAble {
title_list.SortBy(Xoctg_view_itm_sorter_id._);
int len = title_list.Count();
int pct = len / 16;
- Xodb_page dbo_page = new Xodb_page();
+ Xowd_page_itm dbo_page = new Xowd_page_itm();
for (int i = 0; i < len; i++) {
Xoctg_view_itm itm = (Xoctg_view_itm)title_list.FetchAt(i);
if (pct != 0 && i % pct == 0) usr_dlg.Prog_many("", "", "loading title data: ~{0} / ~{1} -- ~{2}", i, len, String_.new_utf8_(itm.Sortkey()));
diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr_tst.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr_tst.java
index d238c895a..7f1aab028 100644
--- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr_tst.java
+++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr_tst.java
@@ -252,7 +252,7 @@ class Xoh_ctg_page_fxt {
fmtr_itm.Col_idx_(0, 0);
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());
+ Tfds.Eq_str_lines(expd, bfr.To_str_and_rls());
}
public void Test_html_grp(byte tid, String expd) {
Xoctg_fmtr_all list_mgr = ctg_html.Fmtr(tid);
@@ -260,11 +260,11 @@ class Xoh_ctg_page_fxt {
fmtr_grp.Init_from_all(wiki, wiki.Lang(), ctg, list_mgr, ctg.Grp_by_tid(tid));
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());
+ Tfds.Eq_str_lines(expd, bfr.To_str_and_rls());
}
public void Test_html_all(byte tid, String expd) {
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());
+ Tfds.Eq_str_lines(expd, bfr.To_str_and_rls());
}
}
diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_itms.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_itms.java
index e2ce90450..719161092 100644
--- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_itms.java
+++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_itms.java
@@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.ctgs; import gplx.*; import gplx.xowa.*;
-import gplx.xowa.html.*; import gplx.xowa.html.lnkis.*;
+import gplx.xowa.html.*; import gplx.xowa.html.lnkis.*; import gplx.xowa.wikis.data.tbls.*;
import gplx.xowa.users.history.*;
public class Xoctg_pagelist_itms implements Bry_fmtr_arg {
public void Init_app(Xoae_app app, Bry_fmtr fmtr_itm) {
@@ -26,11 +26,11 @@ public class Xoctg_pagelist_itms implements Bry_fmtr_arg {
} private Xoh_href_parser href_parser; private Xou_history_mgr history_mgr; private Bry_fmtr fmtr_itm;
public void Init_wiki(Xowe_wiki wiki) {this.wiki = wiki;} private Xowe_wiki wiki;
public void Itms_clear() {itms.Clear();} private ListAdp itms = ListAdp_.new_();
- public void Itms_add(Xodb_page page) {itms.Add(page);}
+ public void Itms_add(Xowd_page_itm page) {itms.Add(page);}
public void XferAry(Bry_bfr bfr, int idx) {
int len = itms.Count();
for (int i = 0; i < len; i++) {
- Xodb_page page = (Xodb_page)itms.FetchAt(i);
+ Xowd_page_itm page = (Xowd_page_itm)itms.FetchAt(i);
Xoa_ttl ttl = Xoa_ttl.parse_(wiki, Xow_ns_.Id_category, page.Ttl_page_db());
byte[] lnki_cls = Xoh_lnki_wtr.Lnki_cls_visited(history_mgr, wiki.Domain_bry(), ttl.Page_txt()); // NOTE: must be ttl.Page_txt() in order to match Xou_history_mgr.Add
byte[] lnki_href = href_parser.Build_to_bry(wiki, ttl);
diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_wtr.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_wtr.java
index 46c6314a7..72397397a 100644
--- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_wtr.java
+++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_wtr.java
@@ -16,19 +16,19 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.ctgs; import gplx.*; import gplx.xowa.*;
-import gplx.xowa.users.history.*; import gplx.xowa.dbs.tbls.*;
+import gplx.xowa.users.history.*; import gplx.xowa.wikis.data.tbls.*;
public class Xoctg_pagelist_wtr {
private Xoctg_pagelist_mgr pagelist_mgr = new Xoctg_pagelist_mgr();
public Xoctg_pagelist_wtr Init_by_app(Xoae_app app) {pagelist_mgr.Init_by_app(app, this); return this;}
public void Write(Bry_bfr bfr, Xowe_wiki wiki, Xoae_page page) {
- Xodb_page[] page_ary = wiki.Db_mgr().Load_mgr().Load_ctg_list(page.Category_list());
+ Xowd_page_itm[] page_ary = wiki.Db_mgr().Load_mgr().Load_ctg_list(page.Category_list());
Print_hidden(bfr, wiki, page_ary);
}
- public void Print_hidden(Bry_bfr bfr, Xowe_wiki wiki, Xodb_page[] page_ary) {
+ public void Print_hidden(Bry_bfr bfr, Xowe_wiki wiki, Xowd_page_itm[] page_ary) {
int len = page_ary.length;
for (int i = 0; i < len; i++) {
- Xodb_page page = page_ary[i];
- Xodb_category_itm ctg_xtn = (Xodb_category_itm)page.Xtn();
+ Xowd_page_itm page = page_ary[i];
+ Xowd_category_itm ctg_xtn = (Xowd_category_itm)page.Xtn();
Xoctg_pagelist_grp list = ctg_xtn != null && ctg_xtn.Hidden() ? pagelist_mgr.Grp_hidden() : pagelist_mgr.Grp_normal();
list.Itms().Itms_add(page);
}
diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_wtr_tst.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_wtr_tst.java
index cf5b65358..eafa4f966 100644
--- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_wtr_tst.java
+++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_wtr_tst.java
@@ -17,7 +17,7 @@ along with this program. If not, see .
*/
package gplx.xowa.ctgs; import gplx.*; import gplx.xowa.*;
import org.junit.*;
-import gplx.xowa.dbs.tbls.*;
+import gplx.xowa.wikis.data.tbls.*;
public class Xoctg_pagelist_wtr_tst {
@Before public void init() {fxt.Clear();} private Xoctg_pagelist_mgr_fxt fxt = new Xoctg_pagelist_mgr_fxt();
@Test public void Basic() {
@@ -70,8 +70,8 @@ class Xoctg_pagelist_mgr_fxt {
int len = ary.length;
for (int i = 0; i < len; i++) {
String ttl = ary[i];
- Xodb_page page = new Xodb_page();
- Xodb_category_itm ctg_xtn = Xodb_category_itm.load_(0, 0, hidden, 0, 0, 0);
+ Xowd_page_itm page = new Xowd_page_itm();
+ Xowd_category_itm ctg_xtn = Xowd_category_itm.load_(0, 0, hidden, 0, 0, 0);
page.Xtn_(ctg_xtn);
page.Ttl_page_db_(Bry_.new_ascii_(ttl));
init_ctgs.AddMany(page);
@@ -79,7 +79,7 @@ class Xoctg_pagelist_mgr_fxt {
} private ListAdp init_ctgs = ListAdp_.new_();
public void Test_print_hidden(String expd) {
Bry_bfr bfr = Bry_bfr.new_();
- Xodb_page[] page_ary = (Xodb_page[])init_ctgs.Xto_ary_and_clear(Xodb_page.class);
+ Xowd_page_itm[] page_ary = (Xowd_page_itm[])init_ctgs.Xto_ary_and_clear(Xowd_page_itm.class);
hidden_wtr.Print_hidden(bfr, fxt.Wiki(), page_ary);
Tfds.Eq_str_lines(expd, bfr.Xto_str_and_clear());
// Tfds.Write(bfr.Xto_bry_and_clear());
diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_ctx.java b/400_xowa/src/gplx/xowa/dbs/Xodb_ctx.java
deleted file mode 100644
index 3c551ef23..000000000
--- a/400_xowa/src/gplx/xowa/dbs/Xodb_ctx.java
+++ /dev/null
@@ -1,22 +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 .
-*/
-package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*;
-public class Xodb_ctx {
- public boolean Html_db_enabled() {return html_db_enabled;} public void Html_db_enabled_(boolean v) {html_db_enabled = v;} private boolean html_db_enabled;
- public static final Xodb_ctx Null = null;
-}
diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr.java b/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr.java
index 3c87c2ae4..229702830 100644
--- a/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr.java
+++ b/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr.java
@@ -16,21 +16,21 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*;
-import gplx.core.primitives.*; import gplx.xowa.bldrs.imports.ctgs.*; import gplx.xowa.ctgs.*; import gplx.xowa.specials.search.*;
+import gplx.core.primitives.*; import gplx.xowa.bldrs.cmds.ctgs.*; import gplx.xowa.ctgs.*; import gplx.xowa.specials.search.*; import gplx.xowa.wikis.data.tbls.*;
public interface Xodb_load_mgr {
void Load_init (Xowe_wiki wiki);
- void Load_page (Xodb_page rv, Xow_ns ns, boolean timestamp_enabled);
- boolean Load_by_id (Xodb_page rv, int id);
+ void Load_page (Xowd_page_itm rv, Xow_ns ns, boolean timestamp_enabled);
+ boolean Load_by_id (Xowd_page_itm rv, int id);
void Load_by_ids (Cancelable cancelable, ListAdp rv, int bgn, int end);
- boolean Load_by_ttl (Xodb_page rv, Xow_ns ns, byte[] ttl);
+ boolean Load_by_ttl (Xowd_page_itm rv, Xow_ns ns, byte[] ttl);
void Load_by_ttls (Cancelable cancelable, OrderedHash rv, boolean fill_idx_fields_only, int bgn, int end);
int Load_ctg_count (byte[] ttl);
boolean Load_ctg_v1 (Xoctg_view_ctg rv, byte[] ttl);
boolean Load_ctg_v2 (Xoctg_data_ctg rv, byte[] ttl);
void Load_ctg_v2a (Xoctg_view_ctg rv, Xoctg_url url_ctg, byte[] ttl_bry, int limit);
- Xodb_page[] Load_ctg_list (byte[][] ctg_ttls);
+ Xowd_page_itm[] Load_ctg_list (byte[][] ctg_ttls);
void Load_search (Cancelable cancelable, ListAdp rv, byte[] search, int results_max);
- void Load_ttls_for_all_pages (Cancelable cancelable, ListAdp rslt_list, Xodb_page rslt_nxt, Xodb_page rslt_prv, Int_obj_ref rslt_count, Xow_ns ns, byte[] key, int max_results, int min_page_len, int browse_len, boolean include_redirects, boolean fetch_prv_item);
+ void Load_ttls_for_all_pages (Cancelable cancelable, ListAdp rslt_list, Xowd_page_itm rslt_nxt, Xowd_page_itm rslt_prv, Int_obj_ref rslt_count, Xow_ns ns, byte[] key, int max_results, int min_page_len, int browse_len, boolean include_redirects, boolean fetch_prv_item);
void Load_ttls_for_search_suggest(Cancelable cancelable, ListAdp rslt_list, Xow_ns ns, byte[] key, int max_results, int min_page_len, int browse_len, boolean include_redirects, boolean fetch_prv_item);
byte[] Find_random_ttl (Xow_ns ns);
void Clear(); // TEST:helper function
diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql.java b/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql.java
index 59eabb348..ff54a7b4b 100644
--- a/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql.java
+++ b/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql.java
@@ -16,81 +16,87 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
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.*;
+import gplx.core.primitives.*; import gplx.dbs.*; import gplx.dbs.cfgs.*;
+import gplx.xowa.apps.*; import gplx.xowa.bldrs.cmds.ctgs.*; import gplx.xowa.ctgs.*; import gplx.xowa.specials.search.*; import gplx.xowa.wikis.data.tbls.*;
+import gplx.xowa.wikis.*; 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, 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 Xodb_load_mgr_sql(Xodb_mgr_sql db_mgr, Xowd_db_mgr fsys_mgr) {this.db_mgr = db_mgr; this.fsys_mgr = fsys_mgr;} private Xodb_mgr_sql db_mgr; Xowd_db_mgr fsys_mgr;
public byte Search_version() {
- if (search_provider == null) Search_version_init();
+ if (search_version_init_needed) Search_version_init();
return search_version;
} private byte search_version = gplx.xowa.specials.search.Xosrh_core.Version_null;
public void Search_version_refresh() {
- search_provider = null;
+ search_version_init_needed = true;
Search_version_init();
}
public void Load_init(Xowe_wiki wiki) {
Load_init_cfg(wiki);
- db_mgr.Tbl_site_stats().Select(wiki);
- db_mgr.Tbl_xowa_ns().Select_all(wiki.Ns_mgr());
+ Xowd_db_file db_core = wiki.Data_mgr__core_mgr().Db__core();
+ db_core.Tbl__site_stats().Select(wiki.Stats());
+ db_core.Tbl__ns().Select_all(wiki.Ns_mgr());
}
private void Load_init_cfg(Xowe_wiki wiki) {
- String_obj_ref version_val = String_obj_ref.null_();
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());
+ Db_cfg_hash cfg_hash = db_mgr.Core_data_mgr().Tbl__cfg().Select_as_hash(Xow_cfg_consts.Grp_wiki_init);
+ String version_val = cfg_hash.Get(version_key).To_str_or("");
+ Xodb_upgrade_mgr.Upgrade(db_mgr, cfg_hash, version_key, version_val);
Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_k004();
Xoa_gfs_mgr gfs_mgr = wiki.Appe().Gfs_mgr();
try {
- int len = kv_ary.length;
- for (int i = 0; i < len; i++) {
- KeyVal kv = kv_ary[i];
- gfs_mgr.Build_prop_set(bfr, Bry_.new_utf8_(kv.Key()), Bry_.new_utf8_(kv.Val_to_str_or_empty()));
+ int len = cfg_hash.Len();
+ for (int i = 0; i < len; ++i) {
+ Db_cfg_itm cfg_itm = cfg_hash.Get_at(i);
+ gfs_mgr.Build_prop_set(bfr, Bry_.new_utf8_(cfg_itm.Key()), Bry_.new_utf8_(cfg_itm.To_str_or("")));
}
gfs_mgr.Run_str_for(wiki, bfr.Xto_str_and_clear());
} finally {bfr.Mkr_rls();}
}
- public boolean Load_by_ttl(Xodb_page rv, Xow_ns ns, byte[] ttl) {return db_mgr.Tbl_page().Select_by_ttl(rv, ns, ttl);}
- public void Load_by_ttls(Cancelable cancelable, OrderedHash rv, boolean fill_idx_fields_only, int bgn, int end) {db_mgr.Tbl_page().Select_by_ttl_in(cancelable, rv, db_mgr.Db_ctx(), fill_idx_fields_only, bgn, end);}
- public void Load_page(Xodb_page rv, Xow_ns ns, boolean timestamp_enabled) {rv.Wtxt_(db_mgr.Tbl_text().Select(rv.Wtxt_db_id(), rv.Id()));}
- public boolean Load_by_id (Xodb_page rv, int id) {return db_mgr.Tbl_page().Select_by_id(rv, id);}
- public void Load_by_ids(Cancelable cancelable, ListAdp rv, int bgn, int end) {db_mgr.Tbl_page().Select_by_id_list(cancelable, false, rv, bgn, end);}
+ public boolean Load_by_ttl(Xowd_page_itm rv, Xow_ns ns, byte[] ttl) {return db_mgr.Core_data_mgr().Tbl__page().Select_by_ttl(rv, ns, ttl);}
+ public void Load_by_ttls(Cancelable cancelable, OrderedHash rv, boolean fill_idx_fields_only, int bgn, int end) {
+ db_mgr.Core_data_mgr().Tbl__page().Select_in__ns_ttl(cancelable, rv, db_mgr.Wiki().Ns_mgr(), fill_idx_fields_only, bgn, end);
+ }
+ public void Load_page(Xowd_page_itm rv, Xow_ns ns, boolean timestamp_enabled) {
+ Xowd_text_tbl text_tbl = db_mgr.Core_data_mgr().Dbs__get_at(rv.Text_db_id()).Tbl__text();
+ byte[] text_bry = text_tbl.Select(rv.Id());
+ rv.Text_(text_bry);
+ }
+ public boolean Load_by_id (Xowd_page_itm rv, int id) {return db_mgr.Core_data_mgr().Tbl__page().Select_by_id(rv, id);}
+ public void Load_by_ids(Cancelable cancelable, ListAdp rv, int bgn, int end) {db_mgr.Core_data_mgr().Tbl__page().Select_in__id(cancelable, false, rv, bgn, end);}
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.Dbs__get_at(ctg.File_idx()).Conn();
- return db_mgr.Ctg_select_v1(rv, p, ctg);
+ int cat_page_id = db_mgr.Core_data_mgr().Tbl__page().Select_id(Xow_ns_.Id_category, ctg_bry); if (cat_page_id == Xowd_page_itm.Id_null) return false;
+ Xowd_category_itm ctg = fsys_mgr.Db__cat_core().Tbl__cat_core().Select(cat_page_id); if (ctg == Xowd_category_itm.Null) return false;
+ return Ctg_select_v1(db_mgr.Wiki(), db_mgr.Core_data_mgr(), rv, ctg.File_idx(), 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.Dbs__get_at(ctg.File_idx()).Conn();
+ int cat_page_id = db_mgr.Core_data_mgr().Tbl__page().Select_id(Xow_ns_.Id_category, ctg_ttl); if (cat_page_id == Xowd_page_itm.Id_null) return;
+ Xowd_category_itm ctg = fsys_mgr.Db__cat_core().Tbl__cat_core().Select(cat_page_id); if (ctg == Xowd_category_itm.Null) return;
ListAdp list = ListAdp_.new_();
- Load_ctg_v2a_db_retrieve(rv, ctg_url, cat_page_id, load_max, p, list);
+ Load_ctg_v2a_db_retrieve(rv, ctg_url, cat_page_id, load_max, ctg.File_idx(), list);
Load_ctg_v2a_ui_sift(rv, ctg, list);
}
- private void Load_ctg_v2a_db_retrieve(Xoctg_view_ctg rv, Xoctg_url ctg_url, int cat_page_id, int load_max, Db_conn p, ListAdp list) {
+ private void Load_ctg_v2a_db_retrieve(Xoctg_view_ctg rv, Xoctg_url ctg_url, int cat_page_id, int load_max, int cat_link_db_idx, ListAdp list) {
int len = Xoa_ctg_mgr.Tid__max;
for (byte i = Xoa_ctg_mgr.Tid_subc; i < len; i++) {
boolean arg_is_from = ctg_url.Grp_fwds()[i] == Bool_.N_byte;
byte[] arg_sortkey = ctg_url.Grp_idxs()[i];
- int found = db_mgr.Tbl_categorylinks().Select_by_type(p, list, cat_page_id, i, arg_sortkey, arg_is_from, load_max);
+ Xowd_cat_link_tbl cat_link_tbl = db_mgr.Core_data_mgr().Dbs__get_at(cat_link_db_idx).Tbl__cat_link();
+ int found = cat_link_tbl.Select_by_type(list, cat_page_id, i, arg_sortkey, arg_is_from, load_max);
if (found > 0 && found == load_max + 1) {
- Xodb_page last_page = (Xodb_page)ListAdp_.Pop(list);
+ Xowd_page_itm last_page = (Xowd_page_itm)ListAdp_.Pop(list);
Xoctg_page_xtn last_ctg = (Xoctg_page_xtn)last_page.Xtn();
rv.Grp_by_tid(i).Itms_last_sortkey_(last_ctg.Sortkey());
}
}
- db_mgr.Tbl_page().Select_by_id_list(Cancelable_.Never, list);
+ db_mgr.Core_data_mgr().Tbl__page().Select_in__id(Cancelable_.Never, list);
}
- private void Load_ctg_v2a_ui_sift(Xoctg_view_ctg rv, Xodb_category_itm ctg, ListAdp list) {
+ private void Load_ctg_v2a_ui_sift(Xoctg_view_ctg rv, Xowd_category_itm ctg, ListAdp list) {
int len = list.Count();
Xowe_wiki wiki = this.db_mgr.Wiki();
byte prv_tid = Byte_.Max_value_127;
Xoctg_view_grp view_grp = null;
for (int i = 0; i < len; i++) {
- Xodb_page db_page = (Xodb_page)list.FetchAt(i);
+ Xowd_page_itm db_page = (Xowd_page_itm)list.FetchAt(i);
if (db_page.Ns_id() == Int_.MinValue) continue; // HACK: page not found; ignore
Xoctg_page_xtn db_ctg = (Xoctg_page_xtn)db_page.Xtn();
byte cur_tid = db_ctg.Tid();
@@ -100,7 +106,7 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr {
}
Xoa_ttl ttl = Xoa_ttl.parse_(wiki, db_page.Ns_id(), db_page.Ttl_page_db());
Xoctg_view_itm view_itm = new Xoctg_view_itm().Sortkey_(db_ctg.Sortkey()).Ttl_(ttl);
- view_itm.Load_by_ttl_data(cur_tid, db_page.Id(), Xodb_page.Modified_on_null_int, db_page.Wtxt_len());
+ view_itm.Load_by_ttl_data(cur_tid, db_page.Id(), Xowd_page_itm.Modified_on_null_int, db_page.Text_len());
view_grp.Itms_add(view_itm);
}
len = Xoa_ctg_mgr.Tid__max;
@@ -110,64 +116,88 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr {
view_grp.Total_(ctg.Count_by_tid(i));
}
}
- private Db_conn search_provider = null;
+ private boolean search_version_init_needed = true;
private void Search_version_init() {
- if (search_provider == 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;
- }
- else {
- search_provider = search_file.Conn();
- search_version = gplx.xowa.specials.search.Xosrh_core.Version_2;
- }
+ if (search_version_init_needed) {
+ search_version_init_needed = false;
+ Xowd_db_file search_db = db_mgr.Core_data_mgr().Db__search();
+ search_version = search_db == Xowd_db_file.Null ? Xosrh_core.Version_1 : Xosrh_core.Version_2;
}
}
public void Load_search(Cancelable cancelable, ListAdp rv, byte[] search, int results_max) {
- if (search_provider == null) Search_version_init();
+ if (search_version_init_needed) Search_version_init();
if (search_version == gplx.xowa.specials.search.Xosrh_core.Version_1)
- db_mgr.Tbl_page().Select_by_search(cancelable, rv, search, results_max);
+ db_mgr.Core_data_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.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);
+ Xowd_db_mgr core_data_mgr = db_mgr.Core_data_mgr();
+ core_data_mgr.Db__search().Tbl__search_word().Select_by_word(cancelable, core_data_mgr.Db__search().Tbl__search_link(), rv, search, results_max);
+ core_data_mgr.Tbl__page().Select_in__id(cancelable, true, rv);
}
}
- public void Load_ttls_for_all_pages(Cancelable cancelable, ListAdp rslt_list, Xodb_page rslt_nxt, Xodb_page rslt_prv, Int_obj_ref rslt_count, Xow_ns ns, byte[] key, int max_results, int min_page_len, int browse_len, boolean include_redirects, boolean fetch_prv_item) {
- db_mgr.Tbl_page().Load_ttls_for_all_pages(cancelable, rslt_list, rslt_nxt, rslt_prv, rslt_count, ns, key, max_results, min_page_len, browse_len, include_redirects, fetch_prv_item);
+ public void Load_ttls_for_all_pages(Cancelable cancelable, ListAdp rslt_list, Xowd_page_itm rslt_nxt, Xowd_page_itm rslt_prv, Int_obj_ref rslt_count, Xow_ns ns, byte[] key, int max_results, int min_page_len, int browse_len, boolean include_redirects, boolean fetch_prv_item) {
+ db_mgr.Core_data_mgr().Tbl__page().Select_for_special_all_pages(cancelable, rslt_list, rslt_nxt, rslt_prv, rslt_count, ns, key, max_results, min_page_len, browse_len, include_redirects, fetch_prv_item);
}
public void Load_ttls_for_search_suggest(Cancelable cancelable, ListAdp rslt_list, Xow_ns ns, byte[] key, int max_results, int min_page_len, int browse_len, boolean include_redirects, boolean fetch_prv_item) {
- db_mgr.Tbl_page().Load_ttls_for_search_suggest(cancelable, rslt_list, ns, key, max_results, min_page_len, browse_len, include_redirects, fetch_prv_item);
+ db_mgr.Core_data_mgr().Tbl__page().Select_for_search_suggest(cancelable, rslt_list, ns, key, max_results, min_page_len, browse_len, include_redirects, fetch_prv_item);
}
public int Load_ctg_count(byte[] ttl) {
- int page_id = db_mgr.Tbl_page().Select_id(Xow_ns_.Id_category, ttl);
- if (page_id == Xodb_mgr_sql.Page_id_null) return 0; // title not found; return 0;
- return db_mgr.Tbl_category().Select(fsys_mgr.Conn_ctg(), page_id).Count_all();
+ if (db_mgr.Core_data_mgr().Db__cat_core() == null) return 0;
+ int page_id = db_mgr.Core_data_mgr().Tbl__page().Select_id(Xow_ns_.Id_category, ttl);
+ if (page_id == Xowd_page_itm.Id_null) return 0; // title not found; return 0;
+ return db_mgr.Core_data_mgr().Db__cat_core().Tbl__cat_core().Select(page_id).Count_all();
}
- public byte[] Load_qid(byte[] wiki_alias, byte[] ns_num, byte[] ttl) {return db_mgr.Tbl_wdata_qids().Select_qid(fsys_mgr.Conn_wdata(), wiki_alias, ns_num, ttl);}
- public int Load_pid(byte[] lang_key, byte[] pid_name) {return db_mgr.Tbl_wdata_pids().Select_pid(fsys_mgr.Conn_wdata(), lang_key, pid_name);}
- public byte[] Find_random_ttl(Xow_ns ns) {return db_mgr.Tbl_page().Select_random(ns);}
+ public byte[] Load_qid(byte[] wiki_alias, byte[] ns_num, byte[] ttl) {return db_mgr.Core_data_mgr().Db__wbase().Tbl__wbase_qid().Select_qid(wiki_alias, ns_num, ttl);}
+ public int Load_pid(byte[] lang_key, byte[] pid_name) {return db_mgr.Core_data_mgr().Db__wbase().Tbl__wbase_pid().Select_pid(lang_key, pid_name);}
+ public byte[] Find_random_ttl(Xow_ns ns) {return db_mgr.Core_data_mgr().Tbl__page().Select_random(ns);}
public void Clear() {}
- public Xodb_page[] Load_ctg_list(byte[][] ctg_ttls) {
+ public Xowd_page_itm[] Load_ctg_list(byte[][] ctg_ttls) {
+ if (db_mgr.Core_data_mgr().Db__cat_core() == null) return Xowd_page_itm.Ary_empty;
int len = ctg_ttls.length;
OrderedHash hash = OrderedHash_.new_bry_();
for (int i = 0; i < len; i++) {
- Xodb_page page = new Xodb_page();
+ Xowd_page_itm page = new Xowd_page_itm();
byte[] ttl = Xoa_ttl.Replace_spaces(ctg_ttls[i]); // NOTE: ctg_ttls has spaces since v1 rendered it literally;
page.Ttl_page_db_(ttl);
if (!hash.Has(ttl))
hash.Add(ttl, page);
}
len = hash.Count(); // must update len (!hash.Has() may have skipped titles)
- db_mgr.Tbl_page().Select_by_ttl_in(Cancelable_.Never, hash, Xow_ns_.Id_category, 0, len);
+ db_mgr.Core_data_mgr().Tbl__page().Select_in__ttl(Cancelable_.Never, hash, Xow_ns_.Id_category, 0, len);
OrderedHash hash2 = OrderedHash_.new_();
for (int i = 0; i < len; i++) {
- Xodb_page page = (Xodb_page)hash.FetchAt(i);
+ Xowd_page_itm page = (Xowd_page_itm)hash.FetchAt(i);
if (!hash2.Has(page.Id_val()))
hash2.Add(page.Id_val(), page);
}
len = hash2.Count(); // must update len (!hash2.Has() may have skipped titles)
- db_mgr.Tbl_category().Select_by_cat_id_in(Cancelable_.Never, hash2, fsys_mgr.Conn_ctg(), db_mgr.Db_ctx(), 0, len);
- return (Xodb_page[])hash.Xto_ary(Xodb_page.class);
+ db_mgr.Core_data_mgr().Db__cat_core().Tbl__cat_core().Select_by_cat_id_in(Cancelable_.Never, hash2, 0, len);
+ return (Xowd_page_itm[])hash.Xto_ary(Xowd_page_itm.class);
+ }
+ private static boolean Ctg_select_v1(Xowe_wiki wiki, Xowd_db_mgr core_data_mgr, Xoctg_view_ctg view_ctg, int link_db_id, Xowd_category_itm ctg) {
+ ListAdp link_list = ListAdp_.new_();
+ core_data_mgr.Dbs__get_at(link_db_id).Tbl__cat_link().Select_in(link_list, ctg.Id());
+ int link_list_len = link_list.Count();
+ link_list.SortBy(Xowd_page_itm_sorter.IdAsc);
+ core_data_mgr.Tbl__page().Select_in__id(Cancelable_.Never, false, link_list, 0, link_list_len);
+ link_list.SortBy(Xowd_page_itm_sorter.Ns_id_TtlAsc);
+ boolean rv = false;
+ for (int i = 0; i < link_list.Count(); i++) {
+ Xowd_page_itm page = (Xowd_page_itm)link_list.FetchAt(i);
+ if (page.Ns_id() == Int_.MinValue) continue; // HACK: page not found; ignore
+ byte ctg_tid = Xodb_load_mgr_txt.Load_ctg_v1_tid(page.Ns_id());
+ Xoctg_view_grp ctg_grp = view_ctg.Grp_by_tid(ctg_tid);
+ Xoctg_view_itm ctg_itm = new Xoctg_view_itm();
+ ctg_itm.Load_by_ttl_data(ctg_tid, page.Id(), 0, page.Text_len());
+ ctg_itm.Ttl_(Xoa_ttl.parse_(wiki, page.Ns_id(), page.Ttl_page_db()));
+ ctg_itm.Sortkey_(page.Ttl_page_db());
+ ctg_grp.Itms_add(ctg_itm);
+ rv = true;
+ }
+ for (byte i = 0; i < Xoa_ctg_mgr.Tid__max; i++) {
+ Xoctg_view_grp ctg_grp = view_ctg.Grp_by_tid(i);
+ ctg_grp.Itms_make();
+ ctg_grp.Total_(ctg_grp.Itms().length);
+ }
+ return rv;
}
}
diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql_tst.java b/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql_tst.java
index 74f492509..699381e33 100644
--- a/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql_tst.java
+++ b/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql_tst.java
@@ -16,12 +16,13 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*;
-import org.junit.*; import gplx.core.primitives.*; import gplx.xowa.bldrs.*; import gplx.xowa.ctgs.*; import gplx.dbs.*; import gplx.xowa.dbs.tbls.*;
+import org.junit.*; import gplx.core.primitives.*; import gplx.xowa.bldrs.*; import gplx.xowa.ctgs.*; import gplx.dbs.*; import gplx.xowa.wikis.data.tbls.*;
public class Xodb_load_mgr_sql_tst {
@Before public void init() {if (Xoa_test_.Db_skip()) return; fxt.Clear();} private Xodb_load_mgr_sql_fxt fxt = new Xodb_load_mgr_sql_fxt();
+ @After public void term() {if (Xoa_test_.Db_skip()) return; fxt.Rls();}
@Test public void Load_ctg_ttls() {
if (Xoa_test_.Db_skip()) return;
- Xodb_page[] ctgs = fxt.pages_
+ Xowd_page_itm[] ctgs = fxt.pages_
( fxt.ctg_(1, "Ctg_1", Bool_.Y, 10, 11, 12)
, fxt.ctg_(2, "Ctg_2", Bool_.N, 20, 21, 22)
, fxt.ctg_(3, "Ctg_3", Bool_.Y, 30, 31, 32)
@@ -39,6 +40,7 @@ class Xoctg_url_mok extends Xoctg_url { public Xoctg_url_mok Page_bgn_(String v)
}
}
class Xodb_load_mgr_sql_fxt {
+ Db_mgr_fxt fxt; Int_obj_ref next_id = Int_obj_ref.new_(1); Xoae_app app; Xowe_wiki wiki;
public void Clear() {
if (fxt == null) {
fxt = new Db_mgr_fxt();
@@ -47,46 +49,47 @@ class Xodb_load_mgr_sql_fxt {
wiki = fxt.Wiki();
app = wiki.Appe();
}
- } Db_mgr_fxt fxt; Int_obj_ref next_id = Int_obj_ref.new_(1); Xoae_app app; Xowe_wiki wiki;
-
- public Xodb_page[] pages_(Xodb_page... ary) {return ary;}
- public Xodb_page ctg_(int id, String ttl, boolean hidden, int count_subcs, int count_files, int count_pages) {
- Xodb_page rv = new Xodb_page().Ns_id_(Xow_ns_.Id_category).Id_(id).Ttl_page_db_(Bry_.new_ascii_(ttl));
- Xodb_category_itm ctg = Xodb_category_itm.load_(id, 0, hidden, count_subcs, count_files, count_pages);
+ }
+ public void Rls() {fxt.Rls();}
+ public Xowd_page_itm[] pages_(Xowd_page_itm... ary) {return ary;}
+ public Xowd_page_itm ctg_(int id, String ttl, boolean hidden, int count_subcs, int count_files, int count_pages) {
+ Xowd_page_itm rv = new Xowd_page_itm().Ns_id_(Xow_ns_.Id_category).Id_(id).Ttl_page_db_(Bry_.new_ascii_(ttl));
+ Xowd_category_itm ctg = Xowd_category_itm.load_(id, 0, hidden, count_subcs, count_files, count_pages);
rv.Xtn_(ctg);
return rv;
}
- public void Init_save_ctgs(Xodb_page[] ary) {
+ public void Init_save_ctgs(Xowd_page_itm[] ary) {
int len = ary.length;
Xodb_mgr_sql db_mgr = wiki.Db_mgr_as_sql();
- 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);
+ Xowd_cat_core_tbl cat_core_tbl = db_mgr.Core_data_mgr().Db__cat_core().Tbl__cat_core().Create_tbl();
DateAdp modified = DateAdp_.Now();
+ Xowd_page_tbl tbl_page = wiki.Db_mgr_as_sql().Core_data_mgr().Tbl__page();
+ tbl_page.Insert_bgn();
+ cat_core_tbl.Insert_bgn();
for (int i = 0; i < len; i++) {
- Xodb_page page = ary[i];
- db_mgr.Tbl_page().Insert(page_stmt, page.Id(), page.Ns_id(), page.Ttl_page_db(), false, modified, 10, page.Id(), 0, 0);
- Xodb_category_itm ctg_itm = (Xodb_category_itm)page.Xtn();
- db_mgr.Tbl_category().Insert(category_stmt, ctg_itm.Id(), ctg_itm.Count_pages(), ctg_itm.Count_subcs(), ctg_itm.Count_files(), Bool_.Xto_byte(ctg_itm.Hidden()), 0);
+ Xowd_page_itm page = ary[i];
+ tbl_page.Insert_cmd_by_batch(page.Id(), page.Ns_id(), page.Ttl_page_db(), false, modified, 10, page.Id(), 0, 0);
+ Xowd_category_itm ctg_itm = (Xowd_category_itm)page.Xtn();
+ cat_core_tbl.Insert_cmd_by_batch(ctg_itm.Id(), ctg_itm.Count_pages(), ctg_itm.Count_subcs(), ctg_itm.Count_files(), Bool_.Xto_byte(ctg_itm.Hidden()), 0);
}
- p.Txn_mgr().Txn_end_all();
+ cat_core_tbl.Insert_end();
+ tbl_page.Insert_end();
}
- public void Test_load_ctg_list(Xodb_page[] ary) {
+ public void Test_load_ctg_list(Xowd_page_itm[] ary) {
int len = ary.length;
byte[][] ttls = new byte[len][];
for (int i = 0; i < len; i++) {
ttls[i] = ary[i].Ttl_page_db();
}
- Xodb_page[] actl = wiki.Db_mgr_as_sql().Load_mgr().Load_ctg_list(ttls);
+ Xowd_page_itm[] actl = wiki.Db_mgr_as_sql().Load_mgr().Load_ctg_list(ttls);
Tfds.Eq_str_lines(Xto_str(ary), Xto_str(actl));
}
- private static String Xto_str(Xodb_page[] ary) {
+ private static String Xto_str(Xowd_page_itm[] ary) {
Bry_bfr bfr = Bry_bfr.new_();
int len = ary.length;
for (int i = 0; i < len; i++) {
- Xodb_page page = ary[i];
- Xodb_category_itm ctg_itm = (Xodb_category_itm)page.Xtn();
+ Xowd_page_itm page = ary[i];
+ Xowd_category_itm ctg_itm = (Xowd_category_itm)page.Xtn();
bfr.Add_int_variable(page.Id()).Add_byte_pipe();
bfr.Add(page.Ttl_page_db()).Add_byte_pipe();
bfr.Add_byte(Bool_.Xto_byte(ctg_itm.Hidden())).Add_byte_nl();
@@ -96,30 +99,6 @@ class Xodb_load_mgr_sql_fxt {
public Xoctg_url_mok ctg_url_() {return new Xoctg_url_mok();}
public Xodb_load_mgr_sql_fxt Init_limit_(int v) {limit = v; return this;} private int limit = 3;
-// public void Init_ctg_insert(Xoctg_mok_ctg ctg) {
-// Xodb_mgr_sql db_mgr = wiki.Db_mgr_as_sql();
-// Db_conn p = db_mgr.Fsys_mgr().Core_provider();
-// p.Txn_mgr().Txn_bgn_if_none();
-// Xodb_categorylinks_tbl ctg_tbl = db_mgr.Tbl_categorylinks();
-// Db_stmt ctg_stmt = ctg_tbl.Insert_stmt(p);
-// Xodb_page_tbl page_tbl = db_mgr.Tbl_page();
-// Db_stmt page_stmt = page_tbl.Insert_stmt();
-// DateAdp modified_on = Tfds.Now_time0_add_min(0);
-// int page_id = next_id.Val_add_post();
-// page_tbl.Insert(page_stmt, page_id, Xow_ns_.Id_category, ctg.Ttl(), false, modified_on, 0, page_id, 0);
-// for (byte i = 0; i < Xoa_ctg_mgr.Tid__max; i++) {
-// Xoctg_mok_grp grp = ctg.Grps_get_or_new(i);
-// int grp_len = grp.Itms().Count();
-// for (int j = 0; j < grp_len; j++) {
-// Xodb_page page = (Xodb_page)grp.Itms().FetchAt(j);
-// Xoctg_page_xtn page_ctg = (Xoctg_page_xtn)page.Xtn();
-// page_id = page.Id();
-// ctg_tbl.Insert(ctg_stmt, page_id, ctg.Ttl(), page_ctg.Sortkey(), 0, i);
-// page_tbl.Insert(page_stmt, page_id, page.Ns_id(), page.Ttl_wo_ns(), false, modified_on, 0, page_id, 0);
-// }
-// }
-// p.Txn_mgr().Txn_end_all();
-// }
public void Test_select(Xoctg_url ctg_url, Xoctg_mok_ctg expd) {
Xoctg_view_ctg view_ctg = new Xoctg_view_ctg();
wiki.Db_mgr_as_sql().Load_mgr().Load_ctg_v2a(view_ctg, ctg_url, expd.Ttl(), limit);
@@ -145,7 +124,7 @@ class Xodb_load_mgr_sql_fxt {
int len = list.Count();
String[] rv = new String[len];
for (int i = 0; i< len; i++) {
- Xodb_page itm = (Xodb_page)list.FetchAt(i);
+ Xowd_page_itm itm = (Xowd_page_itm)list.FetchAt(i);
rv[i] = String_.new_ascii_(itm.Ttl_page_db());
}
return rv;
@@ -181,9 +160,9 @@ class Xoctg_mok_ctg {
int ns_id = Xow_ns_.Id_main;
byte ctg_tid = Xoa_ctg_mgr.Tid_page;
for (int i = bgn; i < end; i++) {
- byte[] ttl = Bry_.Add(ttl_prefix, Bry_.new_ascii_(Int_.Xto_str_pad_bgn(i, 3)));
+ byte[] ttl = Bry_.Add(ttl_prefix, Bry_.new_ascii_(Int_.Xto_str_pad_bgn_zero(i, 3)));
Xoctg_page_xtn db_ctg = new Xoctg_page_xtn(ctg_tid, ttl);
- Xodb_page page = new Xodb_page();
+ Xowd_page_itm page = new Xowd_page_itm();
int page_id = next_id.Val_add_post();
page.Id_(page_id).Ns_id_(ns_id).Ttl_page_db_(ttl).Xtn_(db_ctg);
grp.Itms().Add(page);
diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_txt.java b/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_txt.java
index c8116725a..941494587 100644
--- a/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_txt.java
+++ b/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_txt.java
@@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*;
-import gplx.core.primitives.*; import gplx.core.brys.*; import gplx.core.flds.*; import gplx.xowa.bldrs.imports.ctgs.*; import gplx.xowa.ctgs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.specials.search.*; import gplx.xowa.tdbs.*;
+import gplx.core.primitives.*; import gplx.core.brys.*; import gplx.core.flds.*; import gplx.xowa.bldrs.cmds.ctgs.*; import gplx.xowa.ctgs.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.specials.search.*; import gplx.xowa.tdbs.*;
public class Xodb_load_mgr_txt implements Xodb_load_mgr {
public Xodb_load_mgr_txt(Xowe_wiki wiki) {
this.wiki = wiki;
@@ -24,24 +24,24 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
} private Xowe_wiki wiki; Xotdb_fsys_mgr fsys_mgr;
Xob_xdat_file tmp_xdat_file = new Xob_xdat_file(); Xob_xdat_itm tmp_xdat_itm = new Xob_xdat_itm();
public void Load_init (Xowe_wiki wiki) {}
- public void Load_page(Xodb_page rv, Xow_ns ns, boolean timestamp_enabled) {Load_page(rv, rv.Wtxt_db_id(), rv.Tdb_row_idx(), ns, timestamp_enabled, tmp_xdat_file, tmp_xdat_itm);}
- public void Load_page(Xodb_page rv, int txt_fil_idx, int txt_row_idx, Xow_ns ns, boolean timestamp_enabled, Xob_xdat_file xdat_file, Xob_xdat_itm xdat_itm) {
+ public void Load_page(Xowd_page_itm rv, Xow_ns ns, boolean timestamp_enabled) {Load_page(rv, rv.Text_db_id(), rv.Tdb_row_idx(), ns, timestamp_enabled, tmp_xdat_file, tmp_xdat_itm);}
+ public void Load_page(Xowd_page_itm rv, int txt_fil_idx, int txt_row_idx, Xow_ns ns, boolean timestamp_enabled, Xob_xdat_file xdat_file, Xob_xdat_itm xdat_itm) {
Io_url file = fsys_mgr.Url_ns_fil(Xotdb_dir_info_.Tid_page, ns.Id(), txt_fil_idx);
byte[] bry = gplx.ios.Io_stream_rdr_.Load_all(file); int bry_len = bry.length;
xdat_file.Clear().Parse(bry, bry_len, file).GetAt(xdat_itm, txt_row_idx);
Load_page_parse(rv, bry, bry_len, xdat_itm.Itm_bgn(), xdat_itm.Itm_end(), timestamp_enabled);
}
- public boolean Load_by_ttl(Xodb_page rv, Xow_ns ns, byte[] ttl) { // NOTE: ttl must be correct case; EX: "Example title"
+ public boolean Load_by_ttl(Xowd_page_itm rv, Xow_ns ns, byte[] ttl) { // NOTE: ttl must be correct case; EX: "Example title"
if (!Env_.Mode_testing() && wiki.Init_needed()) wiki.Init_assert(); // NOTE: need to call assert as wiki_finder (and possibly elsewhere) may call load on commons_wiki without ever asserting; DATE:2013-03-19
- if (!Load_xdat_itm(tmp_xdat_itm, ns, Xotdb_dir_info_.Tid_ttl, ttl, Xodb_page_.Txt_ttl_pos, Byte_ascii.Tab, true)) return false;
- Xodb_page_.Txt_ttl_load(rv, tmp_xdat_itm.Itm_bry());
+ if (!Load_xdat_itm(tmp_xdat_itm, ns, Xotdb_dir_info_.Tid_ttl, ttl, Xotdb_page_itm_.Txt_ttl_pos, Byte_ascii.Tab, true)) return false;
+ Xotdb_page_itm_.Txt_ttl_load(rv, tmp_xdat_itm.Itm_bry());
rv.Exists_(true);
return Bry_.Eq(rv.Ttl_page_db(), ttl);
}
public void Load_by_ttls(Cancelable cancelable, OrderedHash rv, boolean fill_idx_fields_only, int bgn, int end) {// NOTE: Load_by_ttls just a wrapper around Load_by_ttl; for xdat, Load_by_ttl is fast enough
for (int i = bgn; i < end; i++) {
if (cancelable.Canceled()) return;
- Xodb_page page = (Xodb_page)rv.FetchAt(i);
+ Xowd_page_itm page = (Xowd_page_itm)rv.FetchAt(i);
Load_by_ttl(page, page.Ns(), page.Ttl_page_db());
}
}
@@ -52,7 +52,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
Gfo_usr_dlg_fmt msg_wtr = Gfo_usr_dlg_fmt.fmt_(GRP_KEY, "search2_ids", "resolving ids: ~{0} of ~{1} (~{2})", len, 10f);
for (int i = 0; i < len; i++) {
if (cancelable.Canceled()) return;
- Xodb_page itm = (Xodb_page)list.FetchAt(i + bgn);
+ Xowd_page_itm itm = (Xowd_page_itm)list.FetchAt(i + bgn);
Base85_utl.XtoStrByAry(itm.Id(), id_bry, 0, 5);
int cur_fil_idx = this.Find_file_idx_by_site(Xotdb_dir_info_.Tid_id, id_bry);
if (cur_fil_idx != prv_fil_idx) {
@@ -63,7 +63,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
itm.Ns_id_(tmp_page.Ns_id()).Ttl_page_db_(tmp_page.Ttl_page_db());
msg_wtr.Write_prog_cur(i, wiki.Appe().Usr_dlg());
}
- } Xodb_page tmp_page = new Xodb_page();
+ } Xowd_page_itm tmp_page = new Xowd_page_itm();
public void Load_search(Cancelable cancelable, ListAdp rv, byte[] search, int results_max) {
Xow_ns ns = wiki.Ns_mgr().Ns_main();
int search_len = search.length;
@@ -115,7 +115,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
int page_id = Base85_utl.XtoIntByAry(raw, pos, pos + 4);
pos += 6; // 5 + 1 for semic;
int page_len = Base85_utl.XtoIntByAry(raw, pos, pos + 4);
- rv.Add(Xodb_page.new_srch(page_id, page_len));
+ rv.Add(Xowd_page_itm.new_srch(page_id, page_len));
pos += 6; // 5 + 1 for pipe
// if (match.Itms_len() == max_results) break;
}
@@ -171,16 +171,16 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
idx_mgr.Total_(count);
}
}
- public boolean Load_by_id(Xodb_page page, int id) {Base85_utl.XtoStrByAry(id, tmp_id_bry, 0, 5); return Load_by_id(page, tmp_id_bry);} private byte[] tmp_id_bry = new byte[5];
- boolean Load_by_id(Xodb_page page, byte[] id_bry) {
+ public boolean Load_by_id(Xowd_page_itm page, int id) {Base85_utl.XtoStrByAry(id, tmp_id_bry, 0, 5); return Load_by_id(page, tmp_id_bry);} private byte[] tmp_id_bry = new byte[5];
+ boolean Load_by_id(Xowd_page_itm page, byte[] id_bry) {
if (!Load_xdat_itm(tmp_xdat_itm, Xotdb_dir_info_.Tid_id, id_bry, true)) return false;;
- Xodb_page_.Txt_id_load(page, tmp_xdat_itm.Itm_bry());
+ Xotdb_page_itm_.Txt_id_load(page, tmp_xdat_itm.Itm_bry());
return true;
}
- boolean Load_by_id(Xodb_page page, Xob_xdat_file xdat_file, byte[] id_bry) {
+ boolean Load_by_id(Xowd_page_itm page, Xob_xdat_file xdat_file, byte[] id_bry) {
xdat_file.Find(tmp_xdat_itm, id_bry, 0, Byte_ascii.Pipe, true);
if (tmp_xdat_itm.Missing()) return false;
- Xodb_page_.Txt_id_load(page, tmp_xdat_itm.Itm_bry());
+ Xotdb_page_itm_.Txt_id_load(page, tmp_xdat_itm.Itm_bry());
return true;
}
boolean Load_xdat_itm(Xob_xdat_itm xdat_itm, byte regy_tid, byte[] key, boolean exact) {return Load_xdat_itm(xdat_itm, null, regy_tid, key, 0, Byte_ascii.Pipe, exact);}
@@ -225,7 +225,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
rv = true;
}
if (cancelable.Canceled()) return false;
- tmp_bfr.Mkr_rls().Clear();
+ tmp_bfr.Clear_and_rls();
return rv;
}
int Find_file_idx_by_ns(byte regy_tid, Xow_ns ns, byte[] key) {
@@ -258,7 +258,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
Load_xdat_file(Cancelable_.Never, tmp_xdat_file, file_url);
Xob_random_itm file = files[file_idx];
tmp_xdat_file.GetAt(tmp_xdat_itm, random_idx - file.Bgn()); // get nth row; EX: random_idx=120; .Bgn=103 -> get 17th
- Xodb_page page = Xodb_page_.Txt_ttl_load(tmp_xdat_itm.Itm_bry());
+ Xowd_page_itm page = Xotdb_page_itm_.Txt_ttl_load(tmp_xdat_itm.Itm_bry());
return page.Ttl_page_db();
}
private static Xob_random_itm[] Build_random_itms(Xowd_regy_mgr mgr, Int_obj_ref count) {
@@ -286,9 +286,9 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
if (tmp_xdat_itm.Missing()) return false;
ListAdp ctgs = ListAdp_.new_();
Load_ctg_v1_parse(ctgs, wiki.Appe().Usr_dlg(), tmp_xdat_itm.Itm_bry());
- ctgs.SortBy(Xodb_page_sorter.IdAsc);
+ ctgs.SortBy(Xowd_page_itm_sorter.IdAsc);
this.Load_by_ids(Cancelable_.Never, ctgs, 0, ctgs.Count());
- ctgs.SortBy(Xodb_page_sorter.Ns_id_TtlAsc);
+ ctgs.SortBy(Xowd_page_itm_sorter.Ns_id_TtlAsc);
int ctgs_len = ctgs.Count(); if (ctgs_len == 0) return false;
if (count_only != null) { // Ctg_count specificed
@@ -296,7 +296,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
return true;
}
for (int i = 0; i < ctgs_len; i++) {
- Xodb_page itm = (Xodb_page)ctgs.FetchAt(i);
+ Xowd_page_itm itm = (Xowd_page_itm)ctgs.FetchAt(i);
byte itm_tid = Load_ctg_v1_tid(itm.Ns_id());
Xoctg_view_itm sub = Load_ctg_v1_sub(itm_tid, itm);
sub.Ttl_(Xoa_ttl.parse_(wiki, itm.Ns_id(), itm.Ttl_page_db())).Sortkey_(itm.Ttl_page_db());
@@ -316,7 +316,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
rv.Clear();
boolean garbage = false;
for (int i = 0; i < rowCount; i++) {
- Xodb_page row = new Xodb_page();
+ Xowd_page_itm row = new Xowd_page_itm();
rv.Add(row);
if (garbage) continue;
int bgn = pos + 1 + (i * (Base85_utl.Len_int + gplx.xowa.apps.progs.Xoa_prog_mgr.Len_dlm_fld));
@@ -340,13 +340,13 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
default: return Xoa_ctg_mgr.Tid_page;
}
}
- private static Xoctg_view_itm Load_ctg_v1_sub(byte tid, Xodb_page data) {
+ private static Xoctg_view_itm Load_ctg_v1_sub(byte tid, Xowd_page_itm data) {
Xoctg_view_itm rv = new Xoctg_view_itm();
- rv.Load_by_ttl_data(tid, data.Id(), 0, data.Wtxt_len());
+ rv.Load_by_ttl_data(tid, data.Id(), 0, data.Text_len());
return rv;
}
- private void Load_page_parse(Xodb_page page, byte[] src, int src_len, int row_bgn, int row_end, boolean timestamp_enabled) { // \n\tdate5\tpage_title\tpage_text
+ private void Load_page_parse(Xowd_page_itm page, byte[] src, int src_len, int row_bgn, int row_end, boolean timestamp_enabled) { // \n\tdate5\tpage_title\tpage_text
int timestamp_bgn = row_bgn + 5 + 1;
int timestamp_end = timestamp_bgn + 5;
if (timestamp_enabled) {
@@ -354,8 +354,8 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
page.Modified_on_(Bit_.Xto_date_short(timestamp));
}
int name_bgn = timestamp_end + 1;
- int name_end = Bry_finder.Find_fwd(src, Xodb_page_.Txt_page_dlm, name_bgn, src_len);
- page.Wtxt_(Bry_.Mid(src, name_end + 1, row_end - 1)); // +1 to skip dlm
+ int name_end = Bry_finder.Find_fwd(src, Xotdb_page_itm_.Txt_page_dlm, name_bgn, src_len);
+ page.Text_(Bry_.Mid(src, name_end + 1, row_end - 1)); // +1 to skip dlm
}
Xowd_regy_mgr Get_regy_by_site(byte regy_tid) {
Xowd_regy_mgr rv = site_regys[regy_tid];
@@ -376,29 +376,29 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
}
return rv;
} private Xowd_regy_mgr[] ns_regys = new Xowd_regy_mgr[Xow_ns_mgr_.Ordinal_max];
- private Xodb_page tmp_rslt_nxt = new Xodb_page(), tmp_rslt_prv = new Xodb_page(); private Int_obj_ref tmp_rslt_count = Int_obj_ref.zero_();
+ private Xowd_page_itm tmp_rslt_nxt = new Xowd_page_itm(), tmp_rslt_prv = new Xowd_page_itm(); private Int_obj_ref tmp_rslt_count = Int_obj_ref.zero_();
public void Load_ttls_for_search_suggest(Cancelable cancelable, ListAdp rslt_list, Xow_ns ns, byte[] key, int max_results, int min_page_len, int browse_len, boolean include_redirects, boolean fetch_prv_item) {
this.Load_ttls_for_all_pages(cancelable, rslt_list, tmp_rslt_nxt, tmp_rslt_prv, tmp_rslt_count, ns, key, max_results, min_page_len, browse_len, include_redirects, fetch_prv_item);
}
- public void Load_ttls_for_all_pages(Cancelable cancelable, ListAdp rslt_list, Xodb_page rslt_nxt, Xodb_page rslt_prv, Int_obj_ref rslt_count, Xow_ns ns, byte[] key, int max_results, int min_page_len, int browse_len, boolean include_redirects, boolean fetch_prv_item) {
+ public void Load_ttls_for_all_pages(Cancelable cancelable, ListAdp rslt_list, Xowd_page_itm rslt_nxt, Xowd_page_itm rslt_prv, Int_obj_ref rslt_count, Xow_ns ns, byte[] key, int max_results, int min_page_len, int browse_len, boolean include_redirects, boolean fetch_prv_item) {
byte dir_tid = Xotdb_dir_info_.Tid_ttl;
Xob_xdat_file cur_xdat_file = new Xob_xdat_file();
Xob_xdat_itm cur_xdat_itm = new Xob_xdat_itm();
Xowd_regy_mgr regy = new Xowd_regy_mgr(fsys_mgr.Url_ns_reg(ns.Num_str(), dir_tid));
int fil_idx = regy.Files_find(key); if (fil_idx == Xowd_regy_mgr.Regy_null) return;
if (!this.Load_xdat_file(Cancelable_.Never, cur_xdat_file, dir_tid, ns, fil_idx)) return;
- cur_xdat_file.Find(cur_xdat_itm, key, Xodb_page_.Txt_ttl_pos, Byte_ascii.Tab, false);
+ cur_xdat_file.Find(cur_xdat_itm, key, Xotdb_page_itm_.Txt_ttl_pos, Byte_ascii.Tab, false);
int itm_idx = cur_xdat_itm.Itm_idx();
if (itm_idx == -1) itm_idx = 0; // nothing found; return;
Special_allpages_query_fwd(rslt_list, rslt_nxt, rslt_count , dir_tid, ns, include_redirects, browse_len, fil_idx, itm_idx , cur_xdat_file, cur_xdat_itm, regy);
Special_allpages_query_bwd(rslt_list, rslt_prv , dir_tid, ns, include_redirects, browse_len, fil_idx, itm_idx - 1, cur_xdat_file, cur_xdat_itm);
}
- private void Special_allpages_query_fwd(ListAdp rslt_list, Xodb_page rslt_nxt, Int_obj_ref rslt_count, byte dir_tid, Xow_ns ns, boolean include_redirects, int total, int fil_idx, int row_idx, Xob_xdat_file xdat_file, Xob_xdat_itm xdat_itm, Xowd_regy_mgr regy) {
+ private void Special_allpages_query_fwd(ListAdp rslt_list, Xowd_page_itm rslt_nxt, Int_obj_ref rslt_count, byte dir_tid, Xow_ns ns, boolean include_redirects, int total, int fil_idx, int row_idx, Xob_xdat_file xdat_file, Xob_xdat_itm xdat_itm, Xowd_regy_mgr regy) {
int count = 0; ++total;
boolean loop = true;
int regy_len = regy.Files_ary().length;
int rslt_list_len = rslt_count.Val();
- Xodb_page nxt_itm = null;
+ Xowd_page_itm nxt_itm = null;
while (loop) {
if (fil_idx == regy_len) break;
if (xdat_file == null) {
@@ -409,7 +409,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
int rows_len = xdat_file.Count();
for (; row_idx < rows_len; row_idx++) {
xdat_file.GetAt(xdat_itm, row_idx);
- Xodb_page ttl_itm = Xodb_page_.Txt_ttl_load(Bry_.Mid(xdat_itm.Src(), xdat_itm.Itm_bgn(), xdat_itm.Itm_end()));
+ Xowd_page_itm ttl_itm = Xotdb_page_itm_.Txt_ttl_load(Bry_.Mid(xdat_itm.Src(), xdat_itm.Itm_bgn(), xdat_itm.Itm_end()));
if (!include_redirects && ttl_itm.Redirected()) continue;
++count;
nxt_itm = ttl_itm;
@@ -429,14 +429,14 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
if (rslt_nxt != null)
rslt_nxt.Copy(nxt_itm);
}
- private void Special_allpages_query_bwd(ListAdp rslt_list, Xodb_page rslt_prv, byte dir_tid, Xow_ns ns, boolean include_redirects, int total, int fil_idx, int row_idx, Xob_xdat_file xdat_file, Xob_xdat_itm xdat_itm) {
+ private void Special_allpages_query_bwd(ListAdp rslt_list, Xowd_page_itm rslt_prv, byte dir_tid, Xow_ns ns, boolean include_redirects, int total, int fil_idx, int row_idx, Xob_xdat_file xdat_file, Xob_xdat_itm xdat_itm) {
if (row_idx < 0) {
--fil_idx;
row_idx = -1;
}
int count = 0;
boolean loop = true;
- Xodb_page prv_itm = null;
+ Xowd_page_itm prv_itm = null;
while (loop) {
if (fil_idx == -1) break;
if (xdat_file == null) {
@@ -448,7 +448,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
row_idx = xdat_file.Count() - 1;
for (; row_idx > -1; row_idx--) {
xdat_file.GetAt(xdat_itm, row_idx);
- Xodb_page ttl_itm = Xodb_page_.Txt_ttl_load(Bry_.Mid(xdat_itm.Src(), xdat_itm.Itm_bgn(), xdat_itm.Itm_end()));
+ Xowd_page_itm ttl_itm = Xotdb_page_itm_.Txt_ttl_load(Bry_.Mid(xdat_itm.Src(), xdat_itm.Itm_bgn(), xdat_itm.Itm_end()));
if (!include_redirects && ttl_itm.Redirected()) continue;
// list.Add(ttl_itm);
++count;
@@ -465,7 +465,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
--fil_idx;
}
if (prv_itm == null && rslt_list.Count() > 0) {
- prv_itm = (Xodb_page)rslt_list.FetchAt(0);
+ prv_itm = (Xowd_page_itm)rslt_list.FetchAt(0);
}
if (rslt_prv != null)
rslt_prv.Copy(prv_itm);
@@ -514,19 +514,19 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
ctg_mgr.Get_titles(wiki.Appe().Usr_dlg(), wiki, rv);
rv.Num_(data_ctg);
}
- public Xodb_page[] Load_ctg_list(byte[][] ttls) {
+ public Xowd_page_itm[] Load_ctg_list(byte[][] ttls) {
int len = ttls.length;
- Xodb_page[] rv = new Xodb_page[len];
+ Xowd_page_itm[] rv = new Xowd_page_itm[len];
Xow_ns ns = wiki.Ns_mgr().Ns_category();
Xoctg_data_ctg ctg_temp = new Xoctg_data_ctg(Bry_.Empty);
for (int i = 0; i < len; i++) {
byte[] ttl = Xoa_ttl.Replace_spaces(ttls[i]); // NOTE: ctg_ttls has spaces since v1 rendered it literally;
- Xodb_page page = new Xodb_page();
+ Xowd_page_itm page = new Xowd_page_itm();
this.Load_by_ttl(page, ns, ttl);
Load_ctg_v2_main(ctg_temp, page.Ttl_page_db());
- Xodb_category_itm ctg_itm = Xodb_category_itm.load_(page.Id(), page.Wtxt_db_id(), ctg_temp.Hidden(), ctg_temp.Total_by_tid(Xoa_ctg_mgr.Tid_subc), ctg_temp.Total_by_tid(Xoa_ctg_mgr.Tid_file), ctg_temp.Total_by_tid(Xoa_ctg_mgr.Tid_page));
+ Xowd_category_itm ctg_itm = Xowd_category_itm.load_(page.Id(), page.Text_db_id(), ctg_temp.Hidden(), ctg_temp.Total_by_tid(Xoa_ctg_mgr.Tid_subc), ctg_temp.Total_by_tid(Xoa_ctg_mgr.Tid_file), ctg_temp.Total_by_tid(Xoa_ctg_mgr.Tid_page));
page.Xtn_(ctg_itm);
rv[i] = page;
}
diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_mgr.java b/400_xowa/src/gplx/xowa/dbs/Xodb_mgr.java
index 7eb6e0e77..be4e0e015 100644
--- a/400_xowa/src/gplx/xowa/dbs/Xodb_mgr.java
+++ b/400_xowa/src/gplx/xowa/dbs/Xodb_mgr.java
@@ -16,15 +16,13 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*;
-import gplx.dbs.*; import gplx.xowa.html.hdumps.*;
-public interface Xodb_mgr extends GfoInvkAble, RlsAble {
+import gplx.dbs.*; import gplx.xowa.wikis.data.*; import gplx.xowa.html.hdumps.*;
+public interface Xodb_mgr extends GfoInvkAble {
byte Tid();
String Tid_name();
- byte Data_storage_format(); void Data_storage_format_(byte v);
byte Category_version();
byte Search_version(); void Search_version_refresh();
- Xodb_ctx Db_ctx();
- DateAdp Dump_date_query();
Xodb_load_mgr Load_mgr();
Xodb_save_mgr Save_mgr();
+ DateAdp Dump_date_query(); // used by maint_mgr
}
diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_sql.java b/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_sql.java
index 8c4f6b890..9ca0864eb 100644
--- a/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_sql.java
+++ b/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_sql.java
@@ -16,127 +16,38 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
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.html.hdumps.*;
-import gplx.xowa.wikis.data.*;
+import gplx.ios.*; import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.dbs.engines.sqlite.*;
+import gplx.xowa.apps.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.ctgs.*; import gplx.xowa.html.hdumps.*;
+import gplx.xowa.wikis.*; 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");
- 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);
+ this.core_data_mgr = new Xowd_db_mgr(wiki.Fsys_mgr().Root_dir(), wiki.Domain_itm());
+ this.load_mgr = new Xodb_load_mgr_sql(this, core_data_mgr);
+ this.save_mgr = new Xodb_save_mgr_sql(this, wiki.Page_mgr());
}
- public byte Tid() {return Tid_sql;} public static final byte Tid_sql = 1;
- public String Tid_name() {return "sqlite3";}
- public Xowe_wiki Wiki() {return wiki;} private Xowe_wiki wiki;
- 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_gzip;
+ public byte Tid() {return Tid_sql;} public String Tid_name() {return "sqlite3";} public static final byte Tid_sql = 1;
+ public Xowd_db_mgr Core_data_mgr() {return core_data_mgr;} private final Xowd_db_mgr core_data_mgr;
+ public Xowe_wiki Wiki() {return wiki;} private final Xowe_wiki wiki;
+ public Xodb_load_mgr Load_mgr() {return load_mgr;} private final Xodb_load_mgr_sql load_mgr;
+ public Xodb_save_mgr Save_mgr() {return save_mgr;} private final Xodb_save_mgr_sql save_mgr;
public byte Category_version() {return category_version;} private byte category_version = Xoa_ctg_mgr.Version_null;
- public byte Search_version() {return load_mgr.Search_version();}
- 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);
- tbl_page.Html_db_enabled_(v);
- 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 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_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_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();
- public Xodb_wdata_qids_tbl Tbl_wdata_qids() {return tbl_wdata_qids;} private Xodb_wdata_qids_tbl tbl_wdata_qids = new Xodb_wdata_qids_tbl();
- public Xodb_wdata_pids_tbl Tbl_wdata_pids() {return tbl_wdata_pids;} private Xodb_wdata_pids_tbl tbl_wdata_pids = new Xodb_wdata_pids_tbl();
- public Xodb_category_tbl Tbl_category() {return tbl_category;} private Xodb_category_tbl tbl_category = new Xodb_category_tbl();
- public Xodb_categorylinks_tbl Tbl_categorylinks() {return tbl_categorylinks;} private Xodb_categorylinks_tbl tbl_categorylinks = new Xodb_categorylinks_tbl();
- public Xodb_search_title_word_tbl Tbl_search_title_word() {return tbl_search_title_word;} private Xodb_search_title_word_tbl tbl_search_title_word = new Xodb_search_title_word_tbl();
- public Xodb_search_title_page_tbl Tbl_search_title_page() {return tbl_search_title_page;} private Xodb_search_title_page_tbl tbl_search_title_page = new Xodb_search_title_page_tbl();
- public byte State() {return state;} private byte state = State_init; public static final byte State_init = 0, State_make = 1, State_load = 2;
+ public byte Search_version() {return load_mgr.Search_version();} public void Search_version_refresh() {load_mgr.Search_version_refresh();}
public DateAdp Dump_date_query() {
- DateAdp rv = wiki.Props().Modified_latest();
- if (rv != null) return rv;
- Io_url url = core_data_mgr.Get_url(Xowd_db_file_.Tid_core);
+ DateAdp rv = wiki.Props().Modified_latest(); if (rv != null) return rv;
+ Io_url url = core_data_mgr.Db__core().Url();
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();
- 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 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_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, 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 : -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);
- }
- public boolean Ctg_select_v1(Xoctg_view_ctg view_ctg, Db_conn ctg_provider, Xodb_category_itm ctg) {
- Db_qry__select_cmd qry = Db_qry_.select_().Cols_(Xodb_categorylinks_tbl.Fld_cl_from)
- .From_(Xodb_categorylinks_tbl.Tbl_name)
- .Where_(Db_crt_.eq_(Xodb_categorylinks_tbl.Fld_cl_to_id, ctg.Id()))
- ;
- ListAdp rslts = ListAdp_.new_();
- DataRdr rdr = DataRdr_.Null;
- try {
- rdr = ctg_provider.Exec_qry_as_rdr(qry);
- while (rdr.MoveNextPeer()) {
- int page_id = rdr.ReadInt(Xodb_categorylinks_tbl.Fld_cl_from);
- Xodb_page itm = new Xodb_page().Id_(page_id);
- rslts.Add(itm);
- }
- } finally {rdr.Rls();}
- int rslts_len = rslts.Count();
- rslts.SortBy(Xodb_page_sorter.IdAsc);
- tbl_page.Select_by_id_list(Cancelable_.Never, false, rslts, 0, rslts_len);
- rslts.SortBy(Xodb_page_sorter.Ns_id_TtlAsc);
- boolean rv = false;
- for (int i = 0; i < rslts.Count(); i++) {
- Xodb_page page = (Xodb_page)rslts.FetchAt(i);
- if (page.Ns_id() == Int_.MinValue) continue; // HACK: page not found; ignore
- byte ctg_tid = Xodb_load_mgr_txt.Load_ctg_v1_tid(page.Ns_id());
- Xoctg_view_grp ctg_grp = view_ctg.Grp_by_tid(ctg_tid);
- Xoctg_view_itm ctg_itm = new Xoctg_view_itm();
- ctg_itm.Load_by_ttl_data(ctg_tid, page.Id(), 0, page.Wtxt_len());
- ctg_itm.Ttl_(Xoa_ttl.parse_(wiki, page.Ns_id(), page.Ttl_page_db()));
- ctg_itm.Sortkey_(page.Ttl_page_db());
- ctg_grp.Itms_add(ctg_itm);
- rv = true;
- }
- for (byte i = 0; i < Xoa_ctg_mgr.Tid__max; i++) {
- Xoctg_view_grp ctg_grp = view_ctg.Grp_by_tid(i);
- ctg_grp.Itms_make();
- ctg_grp.Total_(ctg_grp.Itms().length);
- }
- return rv;
- }
- public void Rls() {
- core_data_mgr.Rls();
+ public void Category_version_update(boolean version_is_1) {
+ String grp = Xow_cfg_consts.Grp_wiki_init;
+ String key = Xoa_gfs_mgr.Build_code(Xowe_wiki.Invk_db_mgr, Xodb_mgr_sql.Invk_category_version);
+ core_data_mgr.Tbl__cfg().Delete_val(grp, key);// always delete ctg version
+ category_version = version_is_1 ? Xoa_ctg_mgr.Version_1 : Xoa_ctg_mgr.Version_2;
+ core_data_mgr.Tbl__cfg().Insert_byte(grp, key, category_version);
}
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);
- else if (ctx.Match(k, Invk_data_storage_format_)) data_storage_format = Xoi_dump_mgr.Wtr_tid_parse(m.ReadStr("v"));
+ if (ctx.Match(k, Invk_data_storage_format)) return Io_stream_.Obsolete_to_str(core_data_mgr.Props().Zip_tid_text());
+ else if (ctx.Match(k, Invk_data_storage_format_)) {} // SERIALIZED:000.sqlite3|xowa_cfg; ignore; read from Xow_db_props
else if (ctx.Match(k, Invk_category_version)) return category_version;
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();
@@ -144,58 +55,9 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble {
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_data_storage_format = "data_storage_format", Invk_data_storage_format_ = "data_storage_format_" // SERIALIZED:000.sqlite3|xowa_cfg
+ , Invk_category_version = "category_version", Invk_category_version_ = "category_version_" // SERIALIZED:000.sqlite3|xowa_cfg
, Invk_search_version = "search_version"
, Invk_tid_name = "tid_name"
;
- public void Category_version_update(boolean version_is_1) {
- String grp = Xodb_mgr_sql.Grp_wiki_init;
- String key = Xoa_gfs_mgr.Build_code(Xowe_wiki.Invk_db_mgr, Xodb_mgr_sql.Invk_category_version);
-// if (category_version != Xoa_ctg_mgr.Version_null)
- tbl_cfg.Delete(grp, key);// always delete ctg version
- category_version = version_is_1 ? Xoa_ctg_mgr.Version_1 : Xoa_ctg_mgr.Version_2;
- tbl_cfg.Insert_str(grp, key, Byte_.Xto_str(category_version));
- }
- public void Delete_by_tid(byte tid) {
- int len = core_data_mgr.Dbs__len();
- for (int i = 0; i < len; 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);
- }
- core_data_mgr.Dbs__save();
- this.Init_load(core_data_mgr.Conn_core().Url());
- }
-
- public static final String Grp_wiki_init = "wiki.init";
- public static final int Page_id_null = -1;
- public static Io_url Find_core_url(Xowe_wiki wiki) {
- Io_url[] ary = Io_mgr._.QueryDir_args(wiki.Fsys_mgr().Root_dir()).FilPath_("*.sqlite3").ExecAsUrlAry();
- int ary_len = ary.length; if (ary_len == 0) return null;
- if (ary_len == 1) return ary[0]; // only 1 file; assume it is core
- String v0_str = wiki.Domain_str() + ".000";
- String v1_str = wiki.Domain_str() + "core.000";
- for (int i = 0; i < ary_len; i++) {
- Io_url itm = ary[i];
- if (String_.Eq(itm.NameOnly(), v0_str)) return itm; // EX: "en.wikipedia.org.000"
- else if (String_.Eq(itm.NameOnly(), v1_str)) return itm; // EX: "en.wikipedia.org.core.000"
- }
- return null;
- }
- public static Xodb_mgr_sql Get_or_load(Xowe_wiki wiki) {
- Xodb_mgr db_mgr = wiki.Db_mgr();
- Xodb_mgr_sql rv = db_mgr.Tid() == Xodb_mgr_txt.Tid_txt ? wiki.Db_mgr_create_as_sql() : wiki.Db_mgr_as_sql();
- byte state = rv.State();
- switch (state) {
- case Xodb_mgr_sql.State_init: rv.Init_load(Db_url_.sqlite_(Xodb_mgr_sql.Find_core_url(wiki))); break; // load
- case Xodb_mgr_sql.State_make: break; // noop; being made; don't load from db;
- case Xodb_mgr_sql.State_load: break; // noop; already loaded;
- default: throw Err_.unhandled(state);
- }
- return rv;
- }
}
diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_txt.java b/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_txt.java
index 1ac8145a0..f025cc776 100644
--- a/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_txt.java
+++ b/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_txt.java
@@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*;
-import gplx.dbs.*; import gplx.xowa.ctgs.*; import gplx.xowa.html.hdumps.*; import gplx.xowa.tdbs.*;
+import gplx.ios.*; import gplx.dbs.*; import gplx.xowa.wikis.data.*; 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;
@@ -25,10 +25,9 @@ public class Xodb_mgr_txt implements Xodb_mgr {
} 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 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_raw;
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_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);
return Io_mgr._.QueryFil(url).ModifiedTime();
@@ -44,10 +43,9 @@ public class Xodb_mgr_txt implements Xodb_mgr {
} byte category_version = Xoa_ctg_mgr.Version_null;
public byte Search_version() {return gplx.xowa.specials.search.Xosrh_core.Version_2;}
public void Search_version_refresh() {throw Err_.not_implemented_();}
- public void 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);
- else if (ctx.Match(k, Invk_data_storage_format_)) data_storage_format = Xoi_dump_mgr.Wtr_tid_parse(m.ReadStr("v"));
+ if (ctx.Match(k, Invk_data_storage_format)) return Io_stream_.Obsolete_to_str(data_storage_format);
+ else if (ctx.Match(k, Invk_data_storage_format_)) data_storage_format = Io_stream_.Obsolete_to_tid(m.ReadStr("v"));
else if (ctx.Match(k, Invk_category_version)) return this.Category_version();
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();
diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr_sql.java b/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr_sql.java
index 63a80bec3..281648a07 100644
--- a/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr_sql.java
+++ b/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr_sql.java
@@ -16,87 +16,61 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*;
-import gplx.ios.*; import gplx.dbs.*; import gplx.xowa.wikis.data.*;
+import gplx.ios.*; import gplx.dbs.*; import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.data.tbls.*;
+import gplx.xowa.wikis.*;
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();
- } private Xodb_mgr_sql db_mgr; private Io_stream_zip_mgr zip_mgr;
+ private final Xow_page_mgr page_mgr;
+ private final Xodb_mgr_sql db_mgr;
+ public Xodb_save_mgr_sql(Xodb_mgr_sql db_mgr, Xow_page_mgr page_mgr) {this.db_mgr = db_mgr; this.page_mgr = page_mgr;}
public boolean Create_enabled() {return create_enabled;} public void Create_enabled_(boolean v) {create_enabled = v;} private boolean create_enabled;
public boolean Update_modified_on_enabled() {return update_modified_on_enabled;} public void Update_modified_on_enabled_(boolean v) {update_modified_on_enabled = v;} private boolean update_modified_on_enabled;
public int Page_id_next() {return page_id_next;} public void Page_id_next_(int v) {page_id_next = v;} private int page_id_next;
- public void Data_create(Xoa_ttl ttl, byte[] text) {
+ public void Data_create(Xoa_ttl ttl, byte[] text_raw) {
int ns_id = ttl.Ns().Id();
- int ns_count = db_mgr.Tbl_xowa_ns().Select_ns_count(ns_id) + 1;
- String page_id = db_mgr.Tbl_xowa_cfg().Select_val_or("db", "page.id_nxt", null);
- int page_id_int = -1;
- if (page_id == null) {
- DataRdr rdr = db_mgr.Tbl_page().Conn().Exec_sql_as_rdr("SELECT (Max(page_id) + 1) AS max_page_id FROM page;");
- if (rdr.MoveNextPeer()) {
- page_id = Int_.Xto_str(rdr.ReadInt("max_page_id"));
- page_id_int = Int_.parse_(page_id);
- db_mgr.Tbl_xowa_cfg().Insert_int("db", "page.id_next", page_id_int);
- }
- rdr.Rls();
+ Xowd_db_file db_file = db_mgr.Core_data_mgr().Db__core();
+ int ns_count = db_file.Tbl__ns().Select_ns_count(ns_id) + 1;
+ int page_id = db_file.Tbl__cfg().Select_int_or("db", "page.id_nxt", -1);
+ if (page_id == -1) { // HACK: was dbs.qrys.Db_qry_sql.rdr_("SELECT (Max(page_id) + 1) AS max_page_id FROM page;")
+ Db_rdr rdr = db_mgr.Core_data_mgr().Tbl__page().Conn().Stmt_select(db_file.Tbl__page().Tbl_name(), String_.Ary(db_file.Tbl__page().Fld_page_id()), Db_meta_fld.Ary_empy).Exec_select__rls_auto();
+ try {
+ int max_page_id = -1;
+ while (rdr.Move_next()) {
+ int cur_page_id = rdr.Read_int("page_id");
+ if (cur_page_id > max_page_id) max_page_id = cur_page_id;
+ }
+ page_id = max_page_id + 1;
+ db_mgr.Core_data_mgr().Tbl__cfg().Insert_int("db", "page.id_next", page_id + 1);
+ } finally {rdr.Rls();}
}
- else
- page_id_int = Int_.parse_(page_id);
- 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.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);
+ Xowd_db_mgr fsys_mgr = db_mgr.Core_data_mgr();
+ Xowd_db_file page_text_db = fsys_mgr.Db__text();
+ Xowd_text_tbl page_text_tbl = page_text_db.Tbl__text();
+ byte[] text_zip = page_text_tbl.Zip(text_raw);
+ boolean redirect = db_mgr.Wiki().Redirect_mgr().Is_redirect(text_raw, text_raw.length);
+ Xowd_page_tbl page_core_tbl = db_mgr.Core_data_mgr().Tbl__page();
+ page_core_tbl.Insert_bgn();
+ page_text_tbl.Insert_bgn();
try {
- db_mgr.Page_create(page_stmt, text_stmt, page_id_int, ns_id, text, redirect, DateAdp_.Now(), text, ns_count, file_idx);
- db_mgr.Tbl_xowa_ns().Update_ns_count(ns_id, ns_count);
- db_mgr.Tbl_xowa_cfg().Update("db", "page.id_next", page_id + 1);
+ page_mgr.Create(page_core_tbl, page_text_tbl, page_id, ns_id, text_raw, redirect, DateAdp_.Now(), text_zip, text_raw.length, ns_count, page_text_db.Id(), -1);
+ db_file.Tbl__ns().Update_ns_count(ns_id, ns_count);
+ db_file.Tbl__cfg().Update_int("db", "page.id_next", page_id + 1);
} finally {
- page_stmt.Rls();
- text_stmt.Rls();
+ page_core_tbl.Insert_end();
+ page_text_tbl.Insert_end();
}
}
- public void Data_update(Xoae_page page, byte[] text) {
- boolean redirect = db_mgr.Wiki().Redirect_mgr().Is_redirect(text, text.length);
+ public void Data_update(Xoae_page page, byte[] text_raw) {
+ boolean redirect = db_mgr.Wiki().Redirect_mgr().Is_redirect(text_raw, text_raw.length);
DateAdp modified = update_modified_on_enabled ? DateAdp_.Now() : page.Revision_data().Modified_on();
- boolean redirect_changed = redirect != db_mgr.Wiki().Redirect_mgr().Is_redirect(page.Data_raw(), page.Data_raw().length);
- boolean modified_changed = !modified.Eq(page.Revision_data().Modified_on());
- int kv_len = 0;
- if (redirect_changed) ++kv_len;
- if (modified_changed) ++kv_len;
- Db_qry qry = null;
- if (kv_len > 0) {
- KeyVal[] kv_ary = new KeyVal[kv_len];
- int kv_idx = 0;
- 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.Core_data_mgr().Conn_core();
- conn.Txn_mgr().Txn_bgn_if_none();
- conn.Exec_qry(qry);
- conn.Txn_mgr().Txn_end_all();
- }
- Xodb_page db_page = new Xodb_page();
+ db_mgr.Core_data_mgr().Tbl__page().Update__redirect__modified(page.Revision_data().Id(), redirect, modified);
+ Xowd_page_itm db_page = new Xowd_page_itm();
db_mgr.Load_mgr().Load_by_id(db_page, page.Revision_data().Id());
- text = zip_mgr.Zip(db_mgr.Data_storage_format(), text);
- db_mgr.Tbl_text().Update(db_page.Wtxt_db_id(), page.Revision_data().Id(), text);
+ Xowd_text_tbl text_tbl = db_mgr.Core_data_mgr().Dbs__get_at(db_page.Text_db_id()).Tbl__text();
+ text_tbl.Update(page.Revision_data().Id(), text_raw);
}
public void Data_rename(Xoae_page page, int trg_ns, byte[] trg_ttl) {
- Db_qry qry = Db_qry_.update_common_("page", Db_crt_.eq_("page_id", page.Revision_data().Id())
- , KeyVal_.new_("page_namespace", trg_ns)
- , KeyVal_.new_("page_title", String_.new_utf8_(trg_ttl))
- );
- try {
- 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.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);
- }
- }
+ db_mgr.Core_data_mgr().Tbl__page().Update__ns__ttl(page.Revision_data().Id(), trg_ns, trg_ttl);
}
public void Clear() {}
- private static String Xto_touched_str(DateAdp v) {return v.XtoStr_fmt("yyyyMMddHHmmss");}
}
diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr_txt.java b/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr_txt.java
index d2064ccb8..c194437ad 100644
--- a/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr_txt.java
+++ b/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr_txt.java
@@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*;
-import gplx.xowa.wikis.*; import gplx.xowa.tdbs.*;
+import gplx.xowa.wikis.*; import gplx.xowa.tdbs.*; import gplx.xowa.wikis.data.tbls.*;
public class Xodb_save_mgr_txt implements Xodb_save_mgr {
public Xodb_save_mgr_txt(Xowe_wiki wiki, Xodb_load_mgr_txt load_mgr) {
this.wiki = wiki;
@@ -30,7 +30,7 @@ public class Xodb_save_mgr_txt implements Xodb_save_mgr {
public void Clear() {page_id_next = 0;} // TEST: needed for ctg_test
public void Data_create(Xoa_ttl ttl, byte[] text) {
Xow_ns ns_itm = ttl.Ns(); byte[] ttl_bry = ttl.Page_db();
- Xodb_page db_page = Xodb_page.new_tmp();
+ Xowd_page_itm db_page = Xowd_page_itm.new_tmp();
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;
@@ -38,7 +38,7 @@ public class Xodb_save_mgr_txt implements Xodb_save_mgr {
int page_id = page_id_next++;
int fil_idx = 0;
int ns_id = ttl.Ns().Id();
- Xodb_page_.Txt_page_save(tmp, page_id, DateAdp_.Now(), ttl_bry, text, true);
+ Xotdb_page_itm_.Txt_page_save(tmp, page_id, DateAdp_.Now(), ttl_bry, text, true);
Io_url page_rdr_url = fsys_mgr.Url_ns_fil(Xotdb_dir_info_.Tid_page, ns_id, fil_idx);
byte[] page_rdr_bry = gplx.ios.Io_stream_rdr_.Load_all(page_rdr_url);
Xob_xdat_file page_rdr = new Xob_xdat_file();
@@ -51,8 +51,8 @@ public class Xodb_save_mgr_txt implements Xodb_save_mgr {
Xoa_ttl redirect_ttl = redirect_mgr.Extract_redirect(text, text_len);
db_page.Init(page_id, ttl.Page_db(), redirect_ttl != null, text_len, fil_idx, row_idx);
- Xodb_page_.Txt_ttl_save(tmp, db_page);
- byte[] ttl_row_bry = tmp.Mkr_rls().Xto_bry_and_clear();
+ Xotdb_page_itm_.Txt_ttl_save(tmp, db_page);
+ byte[] ttl_row_bry = tmp.To_bry_and_rls();
Xowd_hive_mgr ttl_hive = new Xowd_hive_mgr(wiki, Xotdb_dir_info_.Tid_ttl);
ttl_hive.Create(ttl.Ns(), ttl.Page_db(), ttl_row_bry, Bry_comparer_fld_last._);
wiki.Db_mgr().Load_mgr().Clear(); // NOTE: need to clear cached regy_ary in load_mgr
@@ -68,7 +68,7 @@ public class Xodb_save_mgr_txt implements Xodb_save_mgr {
private void Data_update_under(Xoae_page page, byte[] text, byte[] new_ttl) {
Xoa_ttl ttl = page.Ttl();
Xow_ns ns = ttl.Ns(); byte[] ttl_bry = ttl.Page_db();
- Xodb_page db_page = Xodb_page.new_tmp();
+ Xowd_page_itm db_page = Xowd_page_itm.new_tmp();
if (!load_mgr.Load_by_ttl(db_page, ns, ttl_bry)) throw Err_mgr._.fmt_(GRP_KEY, "title_missing", "update requested but title does not exist: ~{0}", String_.new_utf8_(ttl_bry));
byte[] old_ttl = ttl_bry;
if (new_ttl != null) {
@@ -77,35 +77,35 @@ 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.Wtxt_db_id(), db_page.Tdb_row_idx(), ns, true, page_rdr, page_itm);
+ load_mgr.Load_page(tmp_page, db_page.Text_db_id(), db_page.Tdb_row_idx(), ns, true, page_rdr, page_itm);
Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b512();
- if (text == null) text = tmp_page.Wtxt();
+ if (text == null) text = tmp_page.Text();
int text_len = text.length;
DateAdp modified_on = tmp_page.Modified_on();
if (update_modified_on_enabled) {
modified_on = DateAdp_.Now();
page.Revision_data().Modified_on_(modified_on);
}
- Xodb_page_.Txt_page_save(tmp_bfr, db_page.Id(), modified_on, ttl_bry, text, true);
+ Xotdb_page_itm_.Txt_page_save(tmp_bfr, db_page.Id(), modified_on, ttl_bry, text, true);
page_rdr.Update(tmp_bfr, page_itm, tmp_bfr.Xto_bry_and_clear());
- Io_url page_rdr_url = fsys_mgr.Url_ns_fil(Xotdb_dir_info_.Tid_page, ttl.Ns().Id(), db_page.Wtxt_db_id());
+ Io_url page_rdr_url = fsys_mgr.Url_ns_fil(Xotdb_dir_info_.Tid_page, ttl.Ns().Id(), db_page.Text_db_id());
this.Data_save(Xotdb_dir_info_.Tid_page, page_rdr, page_rdr_url, tmp_bfr);
tmp_bfr.Mkr_rls();
// update ttl
Xoa_ttl redirect_ttl = redirect_mgr.Extract_redirect(text, text_len);
- db_page.Wtxt_len_(text_len);
+ db_page.Text_len_(text_len);
db_page.Redirected_(redirect_ttl != null);
Bry_bfr tmp = wiki.Utl__bfr_mkr().Get_b512();
- Xodb_page_.Txt_ttl_save(tmp, db_page);
+ Xotdb_page_itm_.Txt_ttl_save(tmp, db_page);
byte[] ttl_row_bry = tmp.Xto_bry_and_clear();
tmp.Mkr_rls();
Xowd_hive_mgr ttl_hive = new Xowd_hive_mgr(wiki, Xotdb_dir_info_.Tid_ttl);
- ttl_hive.Update(ns, old_ttl, new_ttl, ttl_row_bry, Xodb_page_.Txt_ttl_pos, Byte_ascii.Pipe, true, true);
+ ttl_hive.Update(ns, old_ttl, new_ttl, ttl_row_bry, Xotdb_page_itm_.Txt_ttl_pos, Byte_ascii.Pipe, true, true);
}
private void Data_save(byte dir_tid, Xob_xdat_file xdat_file, Io_url url, Bry_bfr tmp_bfr) {
xdat_file.Save(url);
}
- private Xodb_page tmp_page = new Xodb_page();
+ private Xowd_page_itm tmp_page = new Xowd_page_itm();
public static final int File_idx_unknown = -1;
private static final String GRP_KEY = "xowa.wiki.db.save";
}
diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_upgrade_mgr.java b/400_xowa/src/gplx/xowa/dbs/Xodb_upgrade_mgr.java
index f27810571..83f0aaba2 100644
--- a/400_xowa/src/gplx/xowa/dbs/Xodb_upgrade_mgr.java
+++ b/400_xowa/src/gplx/xowa/dbs/Xodb_upgrade_mgr.java
@@ -16,9 +16,9 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*;
-import gplx.dbs.*; import gplx.xowa.dbs.tbls.*;
+import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.xowa.wikis.data.tbls.*;
class Xodb_upgrade_mgr {
- public static void Upgrade(Xodb_mgr_sql db_mgr, KeyVal[] kv_ary, String version_key, String version_val) {
+ public static void Upgrade(Xodb_mgr_sql db_mgr, Db_cfg_hash cfg_hash, String version_key, String version_val) {
// String version_new = null;
// if (String_.Eq(version_val, "0.6.2.0")) {
// Xodb_upgrade_mgr_v0_6_2_0.Upgrade(db_mgr, kv_ary);
diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_category_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_category_tbl.java
deleted file mode 100644
index d902c8130..000000000
--- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_category_tbl.java
+++ /dev/null
@@ -1,76 +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 .
-*/
-package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*;
-import gplx.dbs.*;
-public class Xodb_category_tbl {
- public Db_stmt Update_stmt(Db_conn p) {return Db_stmt_.new_update_(p, Tbl_name, String_.Ary(Fld_cat_id), Fld_cat_hidden);}
- public void Update(Db_stmt stmt, int cat_id, byte cat_hidden) {
- stmt.Clear()
- .Val_byte(cat_hidden)
- .Val_int(cat_id)
- .Exec_update()
- ;
- }
- public Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_cat_id, Fld_cat_pages, Fld_cat_subcats, Fld_cat_files, Fld_cat_hidden, Fld_cat_file_idx);}
- public void Insert(Db_stmt stmt, int cat_id, int cat_pages, int cat_subcats, int cat_files, byte cat_hidden, int cat_file_idx) {
- stmt.Clear()
- .Val_int(cat_id)
- .Val_int(cat_pages)
- .Val_int(cat_subcats)
- .Val_int(cat_files)
- .Val_byte(cat_hidden)
- .Val_int(cat_file_idx)
- .Exec_insert()
- ;
- }
- public Xodb_category_itm Select(Db_conn p, int cat_page_id) {
- Db_stmt stmt = Db_stmt_.Null;
- DataRdr rdr = DataRdr_.Null;
- try {
- stmt = Db_stmt_.new_select_(p, Tbl_name, String_.Ary(Fld_cat_id));
- rdr = stmt.Val_int(cat_page_id).Exec_select();
- if (rdr.MoveNextPeer()) {
- return Xodb_category_itm.load_
- ( cat_page_id
- , rdr.ReadInt(Fld_cat_file_idx)
- , rdr.ReadByte(Fld_cat_hidden) == Bool_.Y_byte
- , rdr.ReadInt(Fld_cat_subcats)
- , rdr.ReadInt(Fld_cat_files)
- , rdr.ReadInt(Fld_cat_pages)
- );
- }
- } finally {stmt.Rls(); rdr.Rls();}
- return Xodb_category_itm.Null;
- }
- public void Select_by_cat_id_in(Cancelable cancelable, OrderedHash rv, Db_conn p, Xodb_ctx db_ctx, int bgn, int end) {
- Xodb_in_wkr_category_id wkr = new Xodb_in_wkr_category_id();
- wkr.Init(rv);
- wkr.Select_in(p, cancelable, db_ctx, bgn, end);
- }
- public static Xodb_category_itm Read_ctg(DataRdr rdr) {
- return Xodb_category_itm.load_
- ( rdr.ReadInt(Xodb_category_tbl.Fld_cat_id)
- , rdr.ReadInt(Xodb_category_tbl.Fld_cat_file_idx)
- , rdr.ReadByte(Xodb_category_tbl.Fld_cat_hidden) == Bool_.Y_byte
- , rdr.ReadInt(Xodb_category_tbl.Fld_cat_subcats)
- , rdr.ReadInt(Xodb_category_tbl.Fld_cat_files)
- , rdr.ReadInt(Xodb_category_tbl.Fld_cat_pages)
- );
- }
- public static final String Tbl_name = "category", Fld_cat_id = "cat_id", Fld_cat_pages = "cat_pages", Fld_cat_subcats = "cat_subcats", Fld_cat_files = "cat_files", Fld_cat_hidden = "cat_hidden", Fld_cat_file_idx = "cat_file_idx";
-}
diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_categorylinks_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_categorylinks_tbl.java
deleted file mode 100644
index 55b91e3b3..000000000
--- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_categorylinks_tbl.java
+++ /dev/null
@@ -1,68 +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 .
-*/
-package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*;
-import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.ctgs.*;
-public class Xodb_categorylinks_tbl {
- public void Delete_all(Db_conn p) {p.Exec_qry(Db_qry_.delete_tbl_(Tbl_name));}
- public Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_cl_from, Fld_cl_to_id, Fld_cl_sortkey, Fld_cl_timestamp, Fld_cl_type_id);}
- public void Insert(Db_stmt stmt, int page_id, int ctg_page_id, byte[] sortkey, int timestamp, byte ctg_tid) {
- stmt.Clear()
- .Val_int(page_id)
- .Val_int(ctg_page_id)
- .Val_str(String_.new_utf8_(sortkey))
- .Val_int(timestamp)
- .Val_byte(ctg_tid)
- .Exec_insert()
- ;
- }
- Xoctg_idx_mgr Grp_by_tid(Xoctg_data_ctg ctg, byte tid) {
- Xoctg_idx_mgr ctg_grp = ctg.Grp_by_tid(tid);
- if (ctg_grp == null) {
- ctg_grp = new Xoctg_idx_mgr();
- ctg.Grp_mgrs()[tid] = ctg_grp;
- }
- return ctg_grp;
- }
- public int Select_by_type(Db_conn p, ListAdp list, int cat_page_id, byte arg_tid, byte[] arg_sortkey, boolean arg_is_from, int limit) {
- String arg_sortkey_str = arg_sortkey == null ? "" : String_.new_utf8_(arg_sortkey);
- gplx.core.criterias.Criteria comp_crt = !arg_is_from
- ? Db_crt_.mte_(Fld_cl_sortkey, arg_sortkey_str) // from: sortkey >= 'val'
- : Db_crt_.lte_(Fld_cl_sortkey, arg_sortkey_str); // until: sortkey <= 'val'
- Db_qry__select_cmd qry = Db_qry_.select_().Cols_(Fld_cl_from, Fld_cl_sortkey).From_(Tbl_name)
- .Where_(gplx.core.criterias.Criteria_.And_many(Db_crt_.eq_(Fld_cl_to_id, -1), Db_crt_.eq_(Fld_cl_type_id, arg_tid), comp_crt))
- .OrderBy_(Fld_cl_sortkey, !arg_is_from)
- .Limit_(limit + 1); // + 1 to get last_plus_one for next page / previous page
- Db_stmt stmt = Db_stmt_.Null;
- DataRdr rdr = DataRdr_.Null;
- int count = 0;
- try {
- stmt = p.Stmt_new(qry);
- rdr = stmt.Val_int(cat_page_id).Val_byte(arg_tid).Val_str(arg_sortkey_str).Exec_select();
- while (rdr.MoveNextPeer()) {
- int itm_page_id = rdr.ReadInt(Fld_cl_from);
- byte[] itm_sortkey = rdr.ReadBryByStr(Fld_cl_sortkey);
- Xodb_page itm = new Xodb_page().Id_(itm_page_id).Xtn_(new Xoctg_page_xtn(arg_tid, itm_sortkey));
- list.Add(itm);
- ++count;
- }
- } finally {rdr.Rls(); stmt.Rls();}
- list.SortBy(Xodb_page_sorter.Ctg_tid_sortkey_asc);
- return count;
- }
- public static final String Tbl_name = "categorylinks", Fld_cl_from = "cl_from", Fld_cl_to = "cl_to", Fld_cl_to_id = "cl_to_id", Fld_cl_sortkey = "cl_sortkey", Fld_cl_timestamp = "cl_timestamp", Fld_cl_type_id = "cl_type_id";
-}
diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_in_wkr_base.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_in_wkr_base.java
deleted file mode 100644
index f3c935367..000000000
--- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_in_wkr_base.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-XOWA: the XOWA Offline Wiki Application
-Copyright (C) 2012 gnosygnu@gmail.com
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU Affero General Public License as
-published by the Free Software Foundation, either version 3 of the
-License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU Affero General Public License for more details.
-
-You should have received a copy of the GNU Affero General Public License
-along with this program. If not, see .
-*/
-package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*;
-import gplx.dbs.*;
-public abstract class Xodb_in_wkr_base {
- public abstract int Interval();
- public abstract void Fill_stmt(Db_stmt stmt, int bgn, int end);
- public abstract Db_qry Build_qry(Xodb_ctx tbl_ctx, int bgn, int end);
- public abstract void Eval_rslts(Cancelable cancelable, Xodb_ctx db_ctx, DataRdr rdr);
- public void Select_in(Db_conn conn, Cancelable cancelable, Xodb_ctx db_ctx, int full_bgn, int full_end) {
- DataRdr rdr = DataRdr_.Null;
- Db_stmt stmt = Db_stmt_.Null;
- int interval = Interval();
- for (int i = full_bgn; i < full_end; i += interval) {
- int part_end = i + interval;
- if (part_end > full_end) part_end = full_end;
- try {
- stmt = conn.Stmt_new(Build_qry(db_ctx, i, part_end));
- Fill_stmt(stmt, i, part_end);
- rdr = stmt.Exec_select();
- Eval_rslts(cancelable, db_ctx, rdr);
- }
- finally {rdr.Rls(); stmt.Rls();}
- }
- }
- public static Object[] In_ary(int len) {
- Object[] rv = new Object[len];
- for (int i = 0; i < len; i++)
- rv[i] = "";
- return rv;
- }
-}
diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_in_wkr_page.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_in_wkr_page.java
deleted file mode 100644
index 0e71f2da2..000000000
--- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_in_wkr_page.java
+++ /dev/null
@@ -1,145 +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 .
-*/
-package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*;
-import gplx.dbs.*; import gplx.core.criterias.*;
-class Xodb_in_wkr_page_id extends Xodb_in_wkr_page_base {
- private ListAdp list; // list is original list of ids which may have dupes; needed to fill statement (which takes range of bgn - end); DATE:2013-12-08
- private OrderedHash hash; // hash is unique list of ids; needed for fetch from rdr (which indexes by id)
- public void Init(ListAdp list, OrderedHash hash) {this.list = list; this.hash = hash; this.Fill_idx_fields_only_(true);}
- @Override public int Interval() {return 990;}
- @Override public String In_fld_name() {return Xodb_page_tbl.Fld_page_id;}
- @Override public Criteria In_filter(Object[] part_ary) {
- return Db_crt_.in_(this.In_fld_name(), part_ary);
- }
- @Override public void Fill_stmt(Db_stmt stmt, int bgn, int end) {
- for (int i = bgn; i < end; i++) {
- Xodb_page page = (Xodb_page)list.FetchAt(i);
- stmt.Val_int(page.Id());
- }
- }
- @Override public Xodb_page Eval_rslts_key(Xodb_page rdr_page) {return (Xodb_page)hash.Fetch(rdr_page.Id_val());}
-}
-class Xodb_in_wkr_page_title extends Xodb_in_wkr_page_base {
- private OrderedHash hash;
- private int in_ns;
- @Override public int Interval() {return 64;} // NOTE: 96+ overflows; EX: w:Space_Liability_Convention; DATE:2013-10-24
- public void Init(OrderedHash hash, int in_ns) {this.hash = hash; this.in_ns = in_ns;}
- @Override public String In_fld_name() {return Xodb_page_tbl.Fld_page_title;}
- @Override public Criteria In_filter(Object[] part_ary) {
- int len = part_ary.length;
- Criteria[] crt_ary = new Criteria[len];
- for (int i = 0; i < len; i++)
- crt_ary[i] = Criteria_.And(Db_crt_.eq_(Xodb_page_tbl.Fld_page_ns, in_ns), Db_crt_.eq_(Xodb_page_tbl.Fld_page_title, Bry_.Empty));
- return Criteria_.Or_many(crt_ary);
- }
- @Override public void Fill_stmt(Db_stmt stmt, int bgn, int end) {
- for (int i = bgn; i < end; i++) {
- Xodb_page page = (Xodb_page)hash.FetchAt(i);
- stmt.Val_int(in_ns);
- stmt.Val_bry_as_str(page.Ttl_page_db());
- }
- }
- @Override public Xodb_page Eval_rslts_key(Xodb_page rdr_page) {return (Xodb_page)hash.Fetch(rdr_page.Ttl_page_db());}
-}
-class Xodb_in_wkr_page_title_ns extends Xodb_in_wkr_page_base {
- private Xow_ns_mgr ns_mgr;
- private OrderedHash hash;
- @Override public int Interval() {return 64;} // NOTE: 96+ overflows; PAGE:en.w:Space_Liability_Convention; DATE:2013-10-24
- public void Init(Xow_ns_mgr ns_mgr, OrderedHash hash) {this.ns_mgr = ns_mgr; this.hash = hash;}
- @Override public String In_fld_name() {return Xodb_page_tbl.Fld_page_title;}
- @Override public Criteria In_filter(Object[] part_ary) {
- int len = part_ary.length;
- Criteria[] crt_ary = new Criteria[len];
- for (int i = 0; i < len; i++)
- crt_ary[i] = Criteria_.And(Db_crt_.eq_(Xodb_page_tbl.Fld_page_ns, 0), Db_crt_.eq_(Xodb_page_tbl.Fld_page_title, Bry_.Empty));
- return Criteria_.Or_many(crt_ary);
- }
- @Override public void Fill_stmt(Db_stmt stmt, int bgn, int end) {
- for (int i = bgn; i < end; i++) {
- Xodb_page page = (Xodb_page)hash.FetchAt(i);
- stmt.Val_int(page.Ns_id());
- stmt.Val_bry_as_str(page.Ttl_page_db());
- }
- }
- @Override public Xodb_page Eval_rslts_key(Xodb_page rdr_page) {
- Xow_ns ns = ns_mgr.Ids_get_or_null(rdr_page.Ns_id());
- if (ns == null) return null; // NOTE: ns seems to "randomly" be null when threading during redlinks; guard against null; DATE:2014-01-03
- byte[] ttl_wo_ns = rdr_page.Ttl_page_db();
- rdr_page.Ttl_(ns, ttl_wo_ns);
- return (Xodb_page)hash.Fetch(rdr_page.Ttl_full_db());
- }
-}
-abstract class Xodb_in_wkr_page_base extends Xodb_in_wkr_base {
- public String Tbl_name() {return Xodb_page_tbl.Tbl_name;}
- public abstract String In_fld_name();
- public abstract Criteria In_filter(Object[] part_ary);
- public abstract Xodb_page Eval_rslts_key(Xodb_page rdr_page);
- public boolean Fill_idx_fields_only() {return fill_idx_fields_only;} public Xodb_in_wkr_page_base Fill_idx_fields_only_(boolean v) {fill_idx_fields_only = v; return this;} private boolean fill_idx_fields_only;
- @Override public Db_qry Build_qry(Xodb_ctx db_ctx, int bgn, int end) {
- Object[] part_ary = Xodb_in_wkr_base.In_ary(end - bgn);
- return Db_qry_.select_cols_
- ( this.Tbl_name()
- , In_filter(part_ary)
- , fill_idx_fields_only ? Xodb_page_tbl.Flds_select_idx : db_ctx.Html_db_enabled() ? Xodb_page_tbl.Flds_select_all__html_y : Xodb_page_tbl.Flds_select_all__html_n
- )
- ;
- }
- @Override public void Eval_rslts(Cancelable cancelable, Xodb_ctx db_ctx, DataRdr rdr) {
- Xodb_page temp = new Xodb_page();
- boolean html_db_enabled = db_ctx.Html_db_enabled();
- while (rdr.MoveNextPeer()) {
- if (cancelable.Canceled()) return;
- if (fill_idx_fields_only)
- Xodb_page_tbl.Read_page__idx(temp, rdr);
- else
- Xodb_page_tbl.Read_page__all(temp, rdr, html_db_enabled);
- Xodb_page page = Eval_rslts_key(temp);
- if (page == null) continue; // page not found
- temp.Exists_(true);
- page.Copy(temp);
- }
- }
-}
-class Xodb_in_wkr_category_id extends Xodb_in_wkr_base {
- private OrderedHash hash;
- @Override public int Interval() {return 990;}
- public void Init(OrderedHash hash) {this.hash = hash;}
- @Override public Db_qry Build_qry(Xodb_ctx db_ctx, int bgn, int end) {
- Object[] part_ary = Xodb_in_wkr_base.In_ary(end - bgn);
- String in_fld_name = Xodb_category_tbl.Fld_cat_id;
- return Db_qry_.select_cols_
- ( Xodb_category_tbl.Tbl_name
- , Db_crt_.in_(in_fld_name, part_ary)
- )
- ;
- }
- @Override public void Fill_stmt(Db_stmt stmt, int bgn, int end) {
- for (int i = bgn; i < end; i++) {
- Xodb_page page = (Xodb_page)hash.FetchAt(i);
- stmt.Val_int(page.Id());
- }
- }
- @Override public void Eval_rslts(Cancelable cancelable, Xodb_ctx db_ctx, DataRdr rdr) {
- while (rdr.MoveNextPeer()) {
- if (cancelable.Canceled()) return;
- Xodb_category_itm ctg_data = Xodb_category_tbl.Read_ctg(rdr);
- Xodb_page page = (Xodb_page)hash.Fetch(ctg_data.Id_val());
- page.Xtn_(ctg_data);
- }
- }
-}
diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_page_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_page_tbl.java
deleted file mode 100644
index 9f5495fb0..000000000
--- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_page_tbl.java
+++ /dev/null
@@ -1,317 +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 .
-*/
-package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*;
-import gplx.core.primitives.*; import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.core.criterias.*;
-public class Xodb_page_tbl {
- public static final String Tbl_name = "page"
- , Fld_page_id = "page_id", Fld_page_ns = "page_namespace", Fld_page_title = "page_title"
- , Fld_page_is_redirect = "page_is_redirect", Fld_page_touched = "page_touched", Fld_page_len = "page_len"
- , Fld_page_random_int = "page_random_int", Fld_page_file_idx = "page_file_idx"
- , Fld_page_html_db_id = "page_html_db_id", Fld_page_redirect_id = "page_redirect_id";
- private static final String[] Select_by_id_flds__basic = new String[] {Fld_page_id, Fld_page_ns, Fld_page_title, Fld_page_touched, Fld_page_is_redirect, Fld_page_len, Fld_page_file_idx};
- private static final String[] Select_by_id_flds__hdump = new String[] {Fld_page_id, Fld_page_ns, Fld_page_title, Fld_page_touched, Fld_page_is_redirect, Fld_page_len, Fld_page_file_idx, Fld_page_html_db_id, Fld_page_redirect_id};
- private final Xow_ns_mgr ns_mgr; private final Xodb_ctx db_ctx;
- public Xodb_page_tbl(Xowe_wiki wiki) {
- this.ns_mgr = wiki.Ns_mgr();
- this.db_ctx = wiki.Db_mgr().Db_ctx();
- }
- public void Html_db_enabled_(boolean v) {html_db_enabled = v;} private boolean html_db_enabled;
- public Db_conn Conn() {return conn;} public void Conn_(Db_conn conn) {this.conn = conn;} private Db_conn conn;
- public boolean Select_by_ttl(Xodb_page rv, Xow_ns ns, byte[] ttl) {
- Db_rdr rdr = Db_rdr_.Null; Db_stmt stmt = Db_stmt_.Null;
- try {
- stmt = Db_stmt_.new_select_as_rdr(conn, Db_qry__select_in_tbl.new_(Tbl_name, String_.Ary(Fld_page_ns, Fld_page_title), html_db_enabled ? Select_by_id_flds__hdump : Select_by_id_flds__basic, Db_qry__select_in_tbl.Order_by_null));
- rdr = stmt.Val_int(ns.Id()).Val_str(String_.new_utf8_(ttl)).Exec_select_as_rdr();
- if (rdr.Move_next()) {
- Read_page__all2(rv, rdr, html_db_enabled);
- return true;
- }
- } finally {rdr.Rls(); stmt.Rls();}
- return false;
- }
- public static void Read_page__all2(Xodb_page page, Db_rdr rdr, boolean html_db_enabled) {
- int html_db_id = -1, redirected_id = -1;
- if (html_db_enabled) {
- html_db_id = rdr.Read_int(Fld_page_html_db_id);
- redirected_id = rdr.Read_int(Fld_page_redirect_id);
- }
- page.Init_by_sql
- ( rdr.Read_int(Fld_page_id)
- , rdr.Read_int(Fld_page_ns)
- , rdr.Read_bry_by_str(Fld_page_title)
- , DateAdp_.parse_fmt(rdr.Read_str(Fld_page_touched), Page_touched_fmt)
- , rdr.Read_bool_by_byte(Fld_page_is_redirect)
- , rdr.Read_int(Fld_page_len)
- , rdr.Read_int(Fld_page_file_idx)
- , html_db_id
- , redirected_id
- );
- }
- public boolean Select_by_id(Xodb_page rv, int page_id) {
- DataRdr rdr = DataRdr_.Null;
- Db_stmt stmt = Db_stmt_.Null;
- try {
- stmt = Db_stmt_.new_select_(conn, Tbl_name, String_.Ary(Fld_page_id));
- rdr = stmt
- .Val_int(page_id)
- .Exec_select();
- while (rdr.MoveNextPeer()) {
- Read_page__all(rv, rdr, html_db_enabled);
- return true;
- }
- } finally {rdr.Rls(); stmt.Rls();}
- return false;
- }
- public int Select_id(int ns_id, byte[] ttl) {
- DataRdr rdr = DataRdr_.Null;
- Db_stmt stmt = Db_stmt_.Null;
- try {
- stmt = Db_stmt_.new_select_(conn, Tbl_name, String_.Ary(Fld_page_ns, Fld_page_title), Fld_page_id);
- rdr = stmt
- .Val_int(ns_id)
- .Val_bry_as_str(ttl)
- .Exec_select();
- while (rdr.MoveNextPeer()) {
- return rdr.ReadInt(Fld_page_id);
- }
- } finally {rdr.Rls(); stmt.Rls();}
- return Xodb_mgr_sql.Page_id_null;
- }
- public Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, html_db_enabled ? Flds_insert__html_y : Flds_insert__html_n);}
- public void Insert(Db_stmt stmt, int page_id, int ns_id, byte[] ttl_wo_ns, boolean redirect, DateAdp modified_on, int page_len, int random_int, int file_idx, int html_db_id) {
- stmt.Clear()
- .Val_int(page_id)
- .Val_int(ns_id)
- .Val_str(String_.new_utf8_(ttl_wo_ns))
- .Val_byte((byte)(redirect ? 1 : 0))
- .Val_str(Xto_touched_str(modified_on))
- .Val_int(page_len)
- .Val_int(random_int)
- .Val_int(file_idx);
- if (html_db_enabled)
- stmt.Val_int(html_db_id);
- stmt.Exec_insert();
- }
- public DataRdr Select_all(Db_conn p) {
- Db_qry__select_cmd qry = Db_qry__select_cmd.new_().From_(Tbl_name).Cols_(Fld_page_id, Fld_page_title).OrderBy_asc_(Fld_page_id);
- return p.Exec_qry_as_rdr(qry);
- }
- private DataRdr Load_ttls_starting_with_rdr(int ns_id, byte[] ttl_frag, boolean include_redirects, int max_results, int min_page_len, int browse_len, boolean fwd, boolean search_suggest) {
- Criteria crt_ttl = fwd ? Db_crt_.mte_(Fld_page_title, String_.new_utf8_(ttl_frag)) : Db_crt_.lt_(Fld_page_title, String_.new_utf8_(ttl_frag));
- Criteria crt = Criteria_.And_many(Db_crt_.eq_(Fld_page_ns, ns_id), crt_ttl, Db_crt_.mte_(Fld_page_len, min_page_len));
- if (!include_redirects)
- crt = Criteria_.And(crt, Db_crt_.eq_(Fld_page_is_redirect, Byte_.Zero));
- String[] cols = search_suggest ? Flds_select_idx : html_db_enabled ? Flds_select_all__html_y : Flds_select_all__html_n;
- int limit = fwd ? max_results + 1 : max_results; // + 1 to get next item
- Db_qry__select_cmd select = Db_qry_.select_cols_(Tbl_name, crt, cols).Limit_(limit).OrderBy_(Fld_page_title, fwd);
- return select.Exec_qry_as_rdr(conn);
- }
- public void Load_ttls_for_all_pages(Cancelable cancelable, ListAdp rslt_list, Xodb_page rslt_nxt, Xodb_page rslt_prv, Int_obj_ref rslt_count, Xow_ns ns, byte[] key, int max_results, int min_page_len, int browse_len, boolean include_redirects, boolean fetch_prv_item) {
- DataRdr rdr = DataRdr_.Null;
- Xodb_page nxt_itm = null;
- int rslt_idx = 0;
- boolean max_val_check = max_results == Int_.MaxValue;
- try {
- rdr = Load_ttls_starting_with_rdr(ns.Id(), key, include_redirects, max_results, min_page_len, browse_len, true, true);
- while (rdr.MoveNextPeer()) {
- if (cancelable.Canceled()) return;
- Xodb_page page = new Xodb_page();
- Read_page__idx(page, rdr);
- if (max_val_check && !Bry_.HasAtBgn(page.Ttl_page_db(), key)) break;
- nxt_itm = page;
- if (rslt_idx == max_results) {} // last item which is not meant for rslts, but only for nxt itm
- else {
- rslt_list.Add(page);
- ++rslt_idx;
- }
- }
- if (rslt_nxt != null && nxt_itm != null) // occurs when range is empty; EX: "Module:A" in simplewikibooks
- rslt_nxt.Copy(nxt_itm);
- if (fetch_prv_item) { // NOTE: Special:AllPages passes in true, but Search_suggest passes in false
- if (cancelable.Canceled()) return;
- rdr = Load_ttls_starting_with_rdr(ns.Id(), key, include_redirects, max_results, min_page_len, browse_len, false, false);
- Xodb_page prv_itm = new Xodb_page();
- boolean found = false;
- while (rdr.MoveNextPeer()) {
- Read_page__all(prv_itm, rdr, html_db_enabled);
- found = true;
- }
- if (found)
- rslt_prv.Copy(prv_itm);
- else { // at beginning of range, so no items found; EX: "Module:A" is search, but 1st Module is "Module:B"
- if (rslt_list.Count() > 0) // use 1st item
- rslt_prv.Copy((Xodb_page)rslt_list.FetchAt(0));
- }
- }
- }
- finally {rdr.Rls();}
- rslt_count.Val_(rslt_idx);
- }
- public void Load_ttls_for_search_suggest(Cancelable cancelable, ListAdp rslt_list, Xow_ns ns, byte[] key, int max_results, int min_page_len, int browse_len, boolean include_redirects, boolean fetch_prv_item) {
- String search_bgn = String_.new_utf8_(key);
- String search_end = String_.new_utf8_(gplx.intl.Utf8_.Increment_char_at_last_pos(key));
- Db_qry qry = Db_qry_sql.rdr_("SELECT page_id, page_namespace, page_title, page_len FROM page INDEXED BY page__title WHERE page_namespace = " + Int_.Xto_str(ns.Id()) + " AND page_title BETWEEN '" + search_bgn + "' AND '" + search_end + "' ORDER BY page_len DESC LIMIT " + Int_.Xto_str(max_results) + ";");
- DataRdr rdr = DataRdr_.Null;
- try {
- rdr = conn.Exec_qry_as_rdr(qry);
- while (rdr.MoveNextPeer()) {
- if (cancelable.Canceled()) return;
- Xodb_page page = new Xodb_page();
- Read_page__idx(page, rdr);
- rslt_list.Add(page);
- }
- rslt_list.SortBy(Xodb_page_sorter.TitleAsc);
- }
- finally {rdr.Rls();}
- }
- public boolean Select_by_id_list(Cancelable cancelable, ListAdp rv) {return Select_by_id_list(cancelable, false, rv, 0, rv.Count());}
- public boolean Select_by_id_list(Cancelable cancelable, boolean skip_table_read, ListAdp rv) {return Select_by_id_list(cancelable, skip_table_read, rv, 0, rv.Count());}
- public boolean Select_by_id_list(Cancelable cancelable, boolean skip_table_read, ListAdp rv, int bgn, int end) {
- Xodb_page[] page_ary = (Xodb_page[])rv.Xto_ary(Xodb_page.class);
- int len = page_ary.length; if (len == 0) return false;
- OrderedHash hash = OrderedHash_.new_();
- for (int i = 0; i < len; i++) {
- if (cancelable.Canceled()) return false;
- Xodb_page p = page_ary[i];
- if (!hash.Has(p.Id_val())) // NOTE: must check if file already exists b/c dynamicPageList currently allows dupes; DATE:2013-07-22
- hash.Add(p.Id_val(), p);
- }
- Xodb_in_wkr_page_id wkr = new Xodb_in_wkr_page_id();
- wkr.Init(rv, hash);
- wkr.Select_in(conn, cancelable, db_ctx, bgn, end);
- return true;
- }
- public byte[] Select_random(Xow_ns ns) {// ns should be ns_main
- int random_int = RandomAdp_.new_().Next(ns.Count());
- DataRdr rdr = DataRdr_.Null;
- Db_stmt stmt = Db_stmt_.Null;
- byte[] rv = null;
- try {
- stmt = Db_stmt_.new_select_(conn, Tbl_name, String_.Ary(Fld_page_ns, Fld_page_random_int), Fld_page_title);
- rdr = stmt
- .Val_int(ns.Id())
- .Val_int(random_int)
- .Exec_select();
- if (rdr.MoveNextPeer()) {
- rv = rdr.ReadBryByStr(Fld_page_title);
- }
- } finally {rdr.Rls(); stmt.Rls();}
- return rv;
- }
- public void Select_by_search(Cancelable cancelable, ListAdp rv, byte[] search, int results_max) {
- if (Bry_.Len_eq_0(search)) return; // do not allow empty search
- Criteria crt = gplx.core.criterias.Criteria_.And_many(Db_crt_.eq_(Fld_page_ns, Xow_ns_.Id_main), Db_crt_.like_(Fld_page_title, ""));
- Db_qry__select_cmd qry = Db_qry_.select_().From_(Tbl_name).Cols_(Fld_page_id, Fld_page_len, Fld_page_ns, Fld_page_title).Where_(crt); // NOTE: use fields from main index only
- DataRdr rdr = DataRdr_.Null;
- Db_stmt stmt = Db_stmt_.Null;
- search = Bry_.Replace(search, Byte_ascii.Asterisk, Byte_ascii.Percent);
- try {
- stmt = conn.Stmt_new(qry);
- rdr = stmt.Clear().Val_int(Xow_ns_.Id_main).Val_bry_as_str(search).Exec_select();
- while (rdr.MoveNextPeer()) {
- if (cancelable.Canceled()) return;
- Xodb_page page = new Xodb_page();
- page.Id_ (rdr.ReadInt(Fld_page_id));
- page.Ns_id_ (rdr.ReadInt(Fld_page_ns));
- page.Ttl_page_db_ (rdr.ReadBryByStr(Fld_page_title));
- page.Wtxt_len_ (rdr.ReadInt(Fld_page_len));
- rv.Add(page);
- }
- } finally {rdr.Rls(); stmt.Rls();}
- }
- public static byte[] Find_search_end(byte[] orig) {
- byte[] rv = Bry_.Copy(orig);
- int rv_len = rv.length;
- int increment_pos = rv[rv_len - 1] == Byte_ascii.Percent ? rv_len - 2 : rv_len - 1; // increment last char, unless it is %; if %, increment one before it
- return Bry_.Increment_last(rv, increment_pos);
- }
- public Db_stmt Select_for_parse_all_stmt(Db_conn p, int limit, byte redirect) {
- Criteria crt = gplx.core.criterias.Criteria_.And_many(Db_crt_.eq_(Fld_page_ns, -1), Db_crt_.mt_(Fld_page_title, ""));
- if (redirect != Bool_.__byte)
- crt = gplx.core.criterias.Criteria_.And(crt, Db_crt_.eq_(Fld_page_is_redirect, redirect));
- Db_qry__select_cmd qry = Db_qry_.select_().From_(Tbl_name).Cols_(html_db_enabled ? Flds_select_all__html_y : Flds_select_all__html_n)
- .Where_(crt)
- .Limit_(limit);
- return p.Stmt_new(qry);
- }
- public void Select_for_parse_all(Cancelable cancelable, OrderedHash rv, Db_stmt stmt, int ns, byte[] ttl, byte redirect) {
- String ttl_str = String_.new_utf8_(ttl);
- DataRdr rdr = DataRdr_.Null;
- try {
- stmt.Clear().Val_int(ns).Val_str(ttl_str);
- if (redirect != Bool_.__byte) stmt.Val_byte(redirect);
- rdr = stmt.Exec_select();
- while (rdr.MoveNextPeer()) {
- if (cancelable.Canceled()) return;
- Xodb_page page = new Xodb_page();
- Read_page__all(page, rdr, html_db_enabled);
- rv.Add(page.Id_val(), page);
- }
- } finally {rdr.Rls();}
- }
- public void Select_by_ttl_in(Cancelable cancelable, OrderedHash rv, Xodb_ctx db_ctx, boolean fill_idx_fields_only, int bgn, int end) {
- Xodb_in_wkr_page_title_ns wkr = new Xodb_in_wkr_page_title_ns();
- wkr.Fill_idx_fields_only_(fill_idx_fields_only);
- wkr.Init(ns_mgr, rv);
- wkr.Select_in(conn, cancelable, db_ctx, bgn, end);
- }
- public void Select_by_ttl_in(Cancelable cancelable, OrderedHash rv, int ns_id, int bgn, int end) {
- Xodb_in_wkr_page_title wkr = new Xodb_in_wkr_page_title();
- wkr.Init(rv, ns_id);
- wkr.Select_in(conn, cancelable, db_ctx, bgn, end);
- }
- public void Update_html_db_id(int page_id, int html_db_id) {
- if (!html_db_enabled) throw Err_.new_("html_db not enabled");
- Db_stmt stmt = Db_stmt_.new_update_(conn, Tbl_name, String_.Ary(Fld_page_id), Fld_page_html_db_id);
- stmt.Val_int(html_db_id).Val_int(page_id).Exec_update();
- }
- private static final String Page_touched_fmt = "yyyyMMddHHmmss";
- private static String Xto_touched_str(DateAdp v) {return v.XtoStr_fmt(Page_touched_fmt);}
- public static final String[]
- Flds_insert__html_n = String_.Ary(Fld_page_id, Fld_page_ns, Fld_page_title, Fld_page_is_redirect, Fld_page_touched, Fld_page_len, Fld_page_random_int, Fld_page_file_idx)
- , Flds_insert__html_y = String_.Ary(Fld_page_id, Fld_page_ns, Fld_page_title, Fld_page_is_redirect, Fld_page_touched, Fld_page_len, Fld_page_random_int, Fld_page_file_idx, Fld_page_html_db_id, Fld_page_redirect_id)
- , Flds_select_all__html_n = String_.Ary(Fld_page_id, Fld_page_ns, Fld_page_title, Fld_page_touched, Fld_page_is_redirect, Fld_page_len, Fld_page_file_idx)
- , Flds_select_all__html_y = String_.Ary(Fld_page_id, Fld_page_ns, Fld_page_title, Fld_page_touched, Fld_page_is_redirect, Fld_page_len, Fld_page_file_idx, Fld_page_html_db_id, Fld_page_redirect_id)
- , Flds_select_idx = String_.Ary(Fld_page_id, Fld_page_ns, Fld_page_title, Fld_page_len)
- ;
- public static final boolean Load_idx_flds_only_y = true;
- public static void Read_page__all(Xodb_page page, DataRdr rdr, boolean html_db_enabled) {
- int html_db_id = -1, redirected_id = -1;
- if (html_db_enabled) {
- html_db_id = rdr.ReadInt(Fld_page_html_db_id);
- redirected_id = rdr.ReadInt(Fld_page_redirect_id);
- }
- page.Init_by_sql
- ( rdr.ReadInt(Fld_page_id)
- , rdr.ReadInt(Fld_page_ns)
- , rdr.ReadBryByStr(Fld_page_title)
- , DateAdp_.parse_fmt(rdr.ReadStr(Fld_page_touched), Page_touched_fmt)
- , rdr.ReadByte(Fld_page_is_redirect) == 1
- , rdr.ReadInt(Fld_page_len)
- , rdr.ReadInt(Fld_page_file_idx)
- , html_db_id
- , redirected_id
- );
- }
- public static void Read_page__idx(Xodb_page page, DataRdr rdr) {
- page.Id_ (rdr.ReadInt(Fld_page_id));
- page.Ns_id_ (rdr.ReadInt(Fld_page_ns));
- page.Ttl_page_db_ (rdr.ReadBryByStr(Fld_page_title));
- page.Wtxt_len_ (rdr.ReadInt(Fld_page_len));
- }
-}
diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_search_title_page_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_search_title_page_tbl.java
deleted file mode 100644
index ff6ee8e23..000000000
--- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_search_title_page_tbl.java
+++ /dev/null
@@ -1,42 +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 .
-*/
-package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*;
-import gplx.dbs.*; import gplx.dbs.engines.sqlite.*;
-public class Xodb_search_title_page_tbl {
- public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);}
- public static void Create_index_unique(Gfo_usr_dlg usr_dlg, Db_conn p) {Sqlite_engine_.Idx_create(usr_dlg, p, "search", Idx_main_unique);}
- public static void Create_index_non_unique(Gfo_usr_dlg usr_dlg, Db_conn p) {Sqlite_engine_.Idx_create(usr_dlg, p, "search", Idx_main_non_unique);}
- public static Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_stp_word_id, Fld_stp_page_id);}
- public static void Insert(Db_stmt stmt, int word_id, int page_id) {
- stmt.Clear()
- .Val_int(word_id)
- .Val_int(page_id)
- .Exec_insert();
- }
- public static final String Tbl_name = "search_title_page", Fld_stp_word_id = "stp_word_id", Fld_stp_page_id = "stp_page_id";
- private static final String Tbl_sql = String_.Concat_lines_nl
- ( "CREATE TABLE IF NOT EXISTS search_title_page"
- , "( stp_word_id integer NOT NULL"
- , ", stp_page_id integer NOT NULL"
- , ");"
- );
- private static final Db_idx_itm
- Idx_main_unique = Db_idx_itm.sql_("CREATE UNIQUE INDEX IF NOT EXISTS search_title_page__main ON search_title_page (stp_word_id, stp_page_id);")
- , Idx_main_non_unique = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS search_title_page__main ON search_title_page (stp_word_id, stp_page_id);")
- ;
-}
diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_search_title_word_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_search_title_word_tbl.java
deleted file mode 100644
index d74cfa64c..000000000
--- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_search_title_word_tbl.java
+++ /dev/null
@@ -1,96 +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 .
-*/
-package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*;
-import gplx.core.primitives.*; import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.dbs.engines.sqlite.*;
-public class Xodb_search_title_word_tbl {
- public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);}
- public static void Create_index(Gfo_usr_dlg usr_dlg, Db_conn p) {Sqlite_engine_.Idx_create(usr_dlg, p, "search", Indexes_main);}
- public static Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_stw_word_id, Fld_stw_word);}
- public static void Insert(Db_stmt stmt, int word_id, byte[] word) {
- stmt.Clear()
- .Val_int(word_id)
- .Val_bry_as_str(word)
- .Exec_insert();
- }
- public static void Select_by_word(Cancelable cancelable, ListAdp rv, Xodb_ctx db_ctx, byte[] search, int results_max, Db_conn p) {
- Db_qry__select_cmd qry = Db_qry_.select_()
- .Cols_(Xodb_search_title_word_tbl.Fld_stw_word_id)
- .From_(Xodb_search_title_word_tbl.Tbl_name, "w")
- ;
- gplx.core.criterias.Criteria crt = null;
- if (Bry_.Has(search, Byte_ascii.Asterisk)) {
- search = Bry_.Replace(search, Byte_ascii.Asterisk, Byte_ascii.Percent);
- crt = Db_crt_.like_ (Xodb_search_title_word_tbl.Fld_stw_word, String_.new_utf8_(search));
- }
- else
- crt = Db_crt_.eq_ (Xodb_search_title_word_tbl.Fld_stw_word, String_.new_utf8_(search));
- qry.Where_(crt);
-
- DataRdr rdr = DataRdr_.Null;
- ListAdp words = ListAdp_.new_();
- try {
- rdr = qry.Exec_qry_as_rdr(p);
- while (rdr.MoveNextPeer()) {
- int word_id = rdr.ReadInt(Xodb_search_title_word_tbl.Fld_stw_word_id);
- words.Add(Int_obj_val.new_(word_id));
- }
- }
- finally {rdr.Rls();}
-
- Xodb_in_wkr_search_title_id wkr = new Xodb_in_wkr_search_title_id();
- wkr.Init(words, rv);
- wkr.Select_in(p, cancelable, db_ctx, 0, words.Count());
- }
- public static final String Tbl_name = "search_title_word", Fld_stw_word_id = "stw_word_id", Fld_stw_word = "stw_word";
- private static final String Tbl_sql = String_.Concat_lines_nl
- ( "CREATE TABLE IF NOT EXISTS search_title_word"
- , "( stw_word_id integer NOT NULL PRIMARY KEY"
- , ", stw_word varchar(255) NOT NULL"
- , ");"
- );
- private static final Db_idx_itm
- Indexes_main = Db_idx_itm.sql_("CREATE UNIQUE INDEX IF NOT EXISTS search_title_word__main ON search_title_word (stw_word, stw_word_id);");
-}
-class Xodb_in_wkr_search_title_id extends Xodb_in_wkr_base {
- private ListAdp words, pages;
- @Override public int Interval() {return 990;}
- public void Init(ListAdp words, ListAdp pages) {this.words = words; this.pages = pages;}
- @Override public Db_qry Build_qry(Xodb_ctx db_ctx, int bgn, int end) {
- Object[] part_ary = Xodb_in_wkr_base.In_ary(end - bgn);
- String in_fld_name = Xodb_search_title_page_tbl.Fld_stp_word_id;
- return Db_qry_.select_cols_
- ( Xodb_search_title_page_tbl.Tbl_name
- , Db_crt_.in_(in_fld_name, part_ary)
- )
- ;
- }
- @Override public void Fill_stmt(Db_stmt stmt, int bgn, int end) {
- for (int i = bgn; i < end; i++) {
- Int_obj_val word_id = (Int_obj_val)words.FetchAt(i);
- stmt.Val_int(word_id.Val());
- }
- }
- @Override public void Eval_rslts(Cancelable cancelable, Xodb_ctx db_ctx, DataRdr rdr) {
- while (rdr.MoveNextPeer()) {
- if (cancelable.Canceled()) return;
- int page_id = rdr.ReadInt(Xodb_search_title_page_tbl.Fld_stp_page_id);
- Xodb_page page = new Xodb_page().Id_(page_id);
- pages.Add(page);
- }
- }
-}
diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_site_stats_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_site_stats_tbl.java
deleted file mode 100644
index 67198fed9..000000000
--- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_site_stats_tbl.java
+++ /dev/null
@@ -1,49 +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 .
-*/
-package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*;
-import gplx.dbs.*;
-public class Xodb_site_stats_tbl {
- public void Conn_(Db_conn conn) {this.conn = conn;} Db_conn conn;
- public void Update(int num_articles, int num_pages, int num_files) {
- Db_stmt stmt = Db_stmt_.Null;
- try {
- stmt = Db_stmt_.new_update_(conn, Tbl_name, String_.Ary(Fld_ss_row_id), Fld_ss_good_articles, Fld_ss_total_pages, Fld_ss_images);
- stmt.Val_int(num_articles)
- .Val_int(num_pages)
- .Val_int(num_files)
- .Val_int(1)
- .Exec_update();
- ;
- } finally {stmt.Rls();}
- }
- public void Select(Xowe_wiki wiki) {
- Xow_wiki_stats stats = wiki.Stats();
- DataRdr rdr = DataRdr_.Null;
- Db_stmt stmt = Db_stmt_.Null;
- try {
- stmt = Db_stmt_.new_select_all_(conn, Tbl_name);
- rdr = stmt.Exec_select();
- if (rdr.MoveNextPeer()) {
- stats.NumArticles_ (rdr.ReadInt(Fld_ss_good_articles));
- stats.NumPages_ (rdr.ReadInt(Fld_ss_total_pages));
- stats.NumFiles_ (rdr.ReadInt(Fld_ss_images));
- }
- } finally {rdr.Rls(); stmt.Rls();}
- }
- public static final String Tbl_name = "site_stats", Fld_ss_row_id = "ss_row_id", Fld_ss_good_articles = "ss_good_articles", Fld_ss_total_pages = "ss_total_pages", Fld_ss_images = "ss_images";
-}
diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_text_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_text_tbl.java
deleted file mode 100644
index d79d3e9a3..000000000
--- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_text_tbl.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-XOWA: the XOWA Offline Wiki Application
-Copyright (C) 2012 gnosygnu@gmail.com
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU Affero General Public License as
-published by the Free Software Foundation, either version 3 of the
-License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU Affero General Public License for more details.
-
-You should have received a copy of the GNU Affero General Public License
-along with this program. If not, see .
-*/
-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));}
- public Db_stmt Insert_stmt(Db_conn prov) {return Db_stmt_.new_insert_(prov, Tbl_name, Fld_page_id, Fld_old_text);}
- public void Insert(Db_stmt stmt, int page_id, byte[] text, byte storage_type) {
- stmt.Clear().Val_int(page_id).Val_bry(text).Exec_insert();
- }
- public void Update(int file_id, int page_id, byte[] text) {
- Db_stmt stmt = Db_stmt_.Null;
- try {
- 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();}
- }
- public byte[] Select(int file_id, int page_id) {
- Db_stmt stmt = Db_stmt_.Null;
- try {
- 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, Xowd_db_file file, OrderedHash hash) {
- DataRdr rdr = DataRdr_.Null;
- Db_stmt stmt = Db_stmt_.Null;
- try {
- int len = hash.Count();
- ListAdp pages = ListAdp_.new_();
- for (int i = 0; i < len; i++) {
- Xodb_page page = (Xodb_page)hash.FetchAt(i);
- if (page.Wtxt_db_id() == file.Id())
- pages.Add(page);
- }
- len = pages.Count();
- if (len == 0) return;
- Object[] args_ary = new Object[len];
- for (int i = 0; i < len; i++) {
- if (cancelable.Canceled()) return;
- args_ary[i] = 0;
- }
- stmt = Db_stmt_.new_select_in_(file.Conn(), Tbl_name, Fld_page_id, args_ary);
- for (int i = 0; i < len; i++) {
- if (cancelable.Canceled()) return;
- Xodb_page page = (Xodb_page)pages.FetchAt(i);
- stmt.Val_int(page.Id());
- }
- rdr = stmt.Exec_select();
- while (rdr.MoveNextPeer()) {
- if (cancelable.Canceled()) return;
- int page_id = rdr.ReadInt(Fld_page_id);
- byte[] old_text = rdr.ReadBry(Fld_old_text);
- old_text = zip_mgr.Unzip(db_mgr.Data_storage_format(), old_text);
- Xodb_page page = (Xodb_page)hash.Fetch(Int_obj_val.new_(page_id));
- page.Wtxt_(old_text);
- }
- } finally {rdr.Rls(); stmt.Rls();}
- }
- public static final String Tbl_name = "text", Fld_page_id = "page_id", Fld_old_text = "old_text";
-}
diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_wdata_pids_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_wdata_pids_tbl.java
deleted file mode 100644
index 4a9f2779d..000000000
--- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_wdata_pids_tbl.java
+++ /dev/null
@@ -1,37 +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 .
-*/
-package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*;
-import gplx.dbs.*; import gplx.xowa.xtns.wdatas.*;
-public class Xodb_wdata_pids_tbl {
- public void Purge(Db_conn p) {p.Exec_qry(Db_qry_.delete_tbl_(Tbl_name));}
- public Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_wp_src_lang, Fld_wp_src_ttl, Fld_wp_trg_ttl);}
- public void Insert(Db_stmt stmt, byte[] src_lang, byte[] src_ttl, byte[] trg_ttl) {
- stmt.Clear().Val_bry_as_str(src_lang).Val_bry_as_str(src_ttl).Val_bry_as_str(trg_ttl).Exec_insert();
- }
- public int Select_pid(Db_conn p, byte[] src_lang, byte[] src_ttl) {
- Db_stmt stmt = Db_stmt_.Null;
- try {
- stmt = Db_stmt_.new_select_(p, Tbl_name, String_.Ary(Fld_wp_src_lang, Fld_wp_src_ttl), Fld_wp_trg_ttl);
- String pid_str = (String)stmt.Val_bry_as_str(src_lang).Val_bry_as_str(src_ttl).Exec_select_val();
- if (pid_str == null) return Wdata_wiki_mgr.Pid_null; // occurs when pid exists, but does not have entry for language; see hu.w:Marco Polo argali; DATE: 2014-02-01
- byte[] pid_bry = Bry_.new_utf8_(pid_str);
- return pid_bry == null ? Wdata_wiki_mgr.Pid_null : Bry_.Xto_int_or(pid_bry, 1, pid_bry.length, Wdata_wiki_mgr.Pid_null);
- } finally {stmt.Rls();}
- }
- public static final String Tbl_name = "wdata_pids", Fld_wp_src_lang = "wp_src_lang", Fld_wp_src_ttl = "wp_src_ttl", Fld_wp_trg_ttl = "wp_trg_ttl";
-}
diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_wdata_qids_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_wdata_qids_tbl.java
deleted file mode 100644
index b6ff6a239..000000000
--- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_wdata_qids_tbl.java
+++ /dev/null
@@ -1,35 +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 .
-*/
-package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*;
-import gplx.dbs.*;
-public class Xodb_wdata_qids_tbl {
- public void Purge(Db_conn p) {p.Exec_qry(Db_qry_.delete_tbl_(Tbl_name));}
- public Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_wq_src_wiki, Fld_wq_src_ns, Fld_wq_src_ttl, Fld_wq_trg_ttl);}
- public void Insert(Db_stmt stmt, byte[] src_wiki, int src_ns, byte[] src_ttl, byte[] trg_ttl) {
- stmt.Clear().Val_bry_as_str(src_wiki).Val_int(src_ns).Val_bry_as_str(src_ttl).Val_bry_as_str(trg_ttl).Exec_insert();
- }
- public byte[] Select_qid(Db_conn p, byte[] src_wiki, byte[] src_ns, byte[] src_ttl) {
- Db_stmt stmt = Db_stmt_.Null;
- try {
- stmt = Db_stmt_.new_select_(p, Tbl_name, String_.Ary(Fld_wq_src_wiki, Fld_wq_src_ns, Fld_wq_src_ttl), Fld_wq_trg_ttl);
- String rv = (String)stmt.Val_bry_as_str(src_wiki).Val_int(Bry_.Xto_int(src_ns)).Val_bry_as_str(src_ttl).Exec_select_val();
- return rv == null ? null : Bry_.new_utf8_(rv);
- } finally {stmt.Rls();}
- }
- public static final String Tbl_name = "wdata_qids", Fld_wq_src_wiki = "wq_src_wiki", Fld_wq_src_ns = "wq_src_ns", Fld_wq_src_ttl = "wq_src_ttl", Fld_wq_trg_ttl = "wq_trg_ttl";
-}
diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_cfg_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_cfg_tbl.java
deleted file mode 100644
index d1a2532c1..000000000
--- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_cfg_tbl.java
+++ /dev/null
@@ -1,105 +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 .
-*/
-package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*;
-import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.dbs.engines.sqlite.*; import gplx.core.primitives.*;
-public class Xodb_xowa_cfg_tbl {
- public static final String Tbl_name = "xowa_cfg", Fld_cfg_grp = "cfg_grp", Fld_cfg_key = "cfg_key", Fld_cfg_val = "cfg_val";
- public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);}
- public static void Create_index(Db_conn p) {Sqlite_engine_.Idx_create(p, Idx_select);}
- private static final String Tbl_sql = String_.Concat_lines_nl
- ( "CREATE TABLE IF NOT EXISTS xowa_cfg"
- , "( cfg_grp varchar(1024) NOT NULL"
- , ", cfg_key varchar(1024) NOT NULL"
- , ", cfg_val blob NOT NULL"
- , ");"
- );
- private static final Db_idx_itm
- Idx_select = Db_idx_itm.sql_("CREATE UNIQUE INDEX IF NOT EXISTS xowa_cfg__grp_key ON xowa_cfg (cfg_grp, cfg_key);")
- ;
- public Db_conn Conn() {return conn;} public Xodb_xowa_cfg_tbl Conn_(Db_conn conn) {this.conn = conn; return this;} Db_conn conn;
- private DataRdr Select(String grp) {
- Db_qry qry = Db_qry_.select_cols_(Tbl_name, Db_crt_.eq_(Fld_cfg_grp, grp), Fld_cfg_key, Fld_cfg_val);
- return conn.Exec_qry_as_rdr(qry);
- }
- public long Select_val_as_long_or(String grp, String key, long or) {return Long_.parse_or_(Select_val(grp, key), or);}
- public int Select_val_as_int(String grp, String key) {return Int_.parse_(Select_val(grp, key));}
- public String Select_val(String grp, String key) {return Select_val_or(grp, key, null);}
- public String Select_val_or(String grp, String key, String or) {
- Db_qry__select_cmd qry = Db_qry_.select_val_(Tbl_name, Fld_cfg_val, Where_grp_key(grp, key));
- String rv = (String)qry.ExecRdr_val(conn);
- return rv == null ? or : rv;
- }
- public String Select_val_or_make(String grp, String key, String or) {
- String rv = Select_val_or(grp, key, null);
- if (rv == null) {
- rv = or;
- Insert_str(grp, key, rv);
- }
- return rv;
- }
- public KeyVal[] Select_kvs(String grp, String match_key, String_obj_ref match_val) {
- DataRdr rdr = DataRdr_.Null;
- try {
- rdr = this.Select(grp);
- while (rdr.MoveNextPeer()) {
- String key = rdr.ReadStr(Fld_cfg_key);
- String val = rdr.ReadStr(Fld_cfg_val);
- if (String_.Eq(key, match_key)) match_val.Val_(val);
- KeyVal kv = KeyVal_.new_(key, val);
- tmp_list.Add(kv);
- }
- return (KeyVal[])tmp_list.Xto_ary(KeyVal.class);
- }
- finally {rdr.Rls(); tmp_list.Clear();}
- } ListAdp tmp_list = ListAdp_.new_();
- public void Delete(String grp, String key) {
- Db_stmt stmt = Db_stmt_.Null;
- try {
- stmt = Db_stmt_.new_delete_(conn, Tbl_name, String_.Ary(Fld_cfg_grp, Fld_cfg_key));
- stmt.Val_str(grp).Val_str(key).Exec_delete();
- } finally {stmt.Rls();}
- }
- public void Insert_byte(String grp, String key, byte val) {Insert_str(grp, key, Byte_.Xto_str(val));}
- public void Insert_int(String grp, String key, int val) {Insert_str(grp, key, Int_.Xto_str(val));}
- public void Insert_bry_as_str(String grp, String key, byte[] val) {Insert_str(grp, key, String_.new_utf8_(val));}
- public void Insert_str(String grp, String key, String val) {Insert_str(conn, grp, key, val);}
- public static void Insert_str(Db_conn p, String grp, String key, String val) {
- Db_qry qry = Db_qry_.insert_(Tbl_name)
- .Arg_(Fld_cfg_grp , grp)
- .Arg_(Fld_cfg_key , key)
- .Arg_(Fld_cfg_val , val)
- ;
- p.Exec_qry(qry);
- }
- public Db_stmt Update_stmt() {return Db_stmt_.new_update_(conn, Tbl_name, String_.Ary(Fld_cfg_grp, Fld_cfg_key), Fld_cfg_val);}
- public void Update(Db_stmt stmt, String grp, String key, long val) {Update(stmt, grp, key, Long_.Xto_str(val));}
- public void Update(Db_stmt stmt, String grp, String key, int val) {Update(stmt, grp, key, Int_.Xto_str(val));}
- public void Update(Db_stmt stmt, String grp, String key, String val) {
- stmt.Clear()
- .Val_str(val)
- .Val_str(grp)
- .Val_str(key)
- .Exec_update();
- }
- public void Update(String grp, String key, int val) {Update(grp, key, Int_.Xto_str(val));}
- public void Update(String grp, String key, String val) {
- Db_qry qry = Db_qry_.update_common_(Tbl_name, Where_grp_key(grp, key), KeyVal_.new_(Fld_cfg_val, val));
- conn.Exec_qry(qry);
- }
- private gplx.core.criterias.Criteria Where_grp_key(String grp, String key) {return Db_crt_.eq_many_(KeyVal_.new_(Fld_cfg_grp, grp), KeyVal_.new_(Fld_cfg_key, key));}
-}
diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_db_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_db_tbl.java
deleted file mode 100644
index 8fc351e85..000000000
--- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_db_tbl.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-XOWA: the XOWA Offline Wiki Application
-Copyright (C) 2012 gnosygnu@gmail.com
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU Affero General Public License as
-published by the Free Software Foundation, either version 3 of the
-License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU Affero General Public License for more details.
-
-You should have received a copy of the GNU Affero General Public License
-along with this program. If not, see .
-*/
-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 schema_is_1) {
- this.conn = new_conn; flds.Clear();
- String fld_prefix = "";
- 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);
- 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 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(Xowe_core_data_mgr core_data_mgr) {
- stmt_bldr.Batch_bgn();
- try {
- int len = core_data_mgr.Dbs__len();
- for (int i = 0; i < len; i++)
- Commit_itm(core_data_mgr.Dbs__get_at(i));
- } finally {stmt_bldr.Batch_end();}
- }
- 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;
- case Db_cmd_mode.Tid_update: stmt.Clear() .Val_byte(fld_type, itm.Tid()).Val_str(fld_url, itm.Url_rel()).Crt_int(fld_id, itm.Id()).Exec_update(); break;
- case Db_cmd_mode.Tid_delete: stmt.Clear().Crt_int(fld_id, itm.Id()).Exec_delete(); break;
- case Db_cmd_mode.Tid_ignore: break;
- default: throw Err_.unhandled(itm.Cmd_mode());
- }
- itm.Cmd_mode_(Db_cmd_mode.Tid_ignore);
- }
-}
-class Xodb_file_sorter__id implements gplx.lists.ComparerAble {
- public int compare(Object lhsObj, Object 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_file_sorter__id I = new Xodb_file_sorter__id(); Xodb_file_sorter__id() {}
-}
diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_ns_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_ns_tbl.java
deleted file mode 100644
index ed6e01492..000000000
--- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_ns_tbl.java
+++ /dev/null
@@ -1,99 +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 .
-*/
-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 {
- 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 = 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;
- try {
- 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(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);
- ns.Count_(ns_count);
- 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();}
- }
- public int Select_ns_count(int ns_id) {
- 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) {
- 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();
- }
-}
diff --git a/400_xowa/src/gplx/xowa/files/Xof_bin_updater.java b/400_xowa/src/gplx/xowa/files/Xof_bin_updater.java
new file mode 100644
index 000000000..70be78069
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/files/Xof_bin_updater.java
@@ -0,0 +1,43 @@
+/*
+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 .
+*/
+package gplx.xowa.files; import gplx.*; import gplx.xowa.*;
+import gplx.ios.*;
+import gplx.fsdb.data.*; import gplx.fsdb.meta.*; import gplx.xowa.files.fsdb.*;
+public class Xof_bin_updater {
+ private final Fsd_img_itm tmp_img_itm = new Fsd_img_itm(); private final Fsd_thm_itm tmp_thm_itm = Fsd_thm_itm.new_(); private final Fsd_fil_itm tmp_fil_itm = new Fsd_fil_itm();
+ public int Save_bin(Fsm_mnt_itm mnt, Fsm_atr_fil atr_fil, Fsm_bin_fil bin_fil, Xof_fsdb_itm fsdb, Io_stream_rdr rdr, long rdr_len) {
+ int db_uid = -1;
+ int lnki_ext_id = fsdb.Lnki_ext().Id();
+ if (fsdb.File_is_orig()) {
+ if (fsdb.Lnki_ext().Id_is_image()) { // does not add .pdf and .djvu b/c latter do not have w,h for fsdb_img
+ mnt.Insert_img(tmp_img_itm, atr_fil, bin_fil, fsdb.Orig_repo_name(), fsdb.Lnki_ttl(), lnki_ext_id, fsdb.Orig_w(), fsdb.Orig_h(), rdr_len, rdr);
+ db_uid = tmp_img_itm.Fil_id();
+ }
+ else {
+ mnt.Insert_fil(tmp_fil_itm, atr_fil, bin_fil, fsdb.Orig_repo_name(), fsdb.Lnki_ttl(), lnki_ext_id, rdr_len, rdr);
+ db_uid = tmp_fil_itm.Fil_id();
+ }
+ }
+ else {
+ mnt.Insert_thm(tmp_thm_itm, atr_fil, bin_fil, fsdb.Orig_repo_name(), fsdb.Lnki_ttl(), lnki_ext_id, fsdb.Html_w(), fsdb.Html_h(), fsdb.Lnki_time(), fsdb.Lnki_page(), rdr_len, rdr);
+ db_uid = tmp_thm_itm.Thm_id();
+ }
+ mnt.Cfg_mgr().Next_id_commit();
+ return db_uid;
+ }
+}
diff --git a/400_xowa/src/gplx/xowa/files/Xof_file_wkr.java b/400_xowa/src/gplx/xowa/files/Xof_file_wkr.java
index 8bd6fdeff..285830fd8 100644
--- a/400_xowa/src/gplx/xowa/files/Xof_file_wkr.java
+++ b/400_xowa/src/gplx/xowa/files/Xof_file_wkr.java
@@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.files; import gplx.*; import gplx.xowa.*;
-import gplx.threads.*;
+import gplx.threads.*; import gplx.ios.*;
import gplx.fsdb.*; import gplx.fsdb.meta.*; import gplx.fsdb.data.*; import gplx.xowa.files.fsdb.*;
import gplx.xowa.files.repos.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.caches.*; import gplx.xowa.files.gui.*;
import gplx.xowa.html.hdumps.core.*;
@@ -42,7 +42,7 @@ public class Xof_file_wkr implements Gfo_thread_wkr {
private final Xoa_page hpg; private final ListAdp imgs; private final byte exec_tid;
public Xof_file_wkr(Xof_orig_mgr orig_mgr, Xof_bin_mgr bin_mgr, Fsm_mnt_mgr mnt_mgr, Xof_cache_mgr cache_mgr, Xow_repo_mgr repo_mgr, Xog_js_wkr js_wkr, Xoa_page hpg, ListAdp imgs, byte exec_tid) {
this.orig_mgr = orig_mgr; this.bin_mgr = bin_mgr; this.mnt_mgr = mnt_mgr; this.cache_mgr = cache_mgr;
- this.usr_dlg = Gfo_usr_dlg_._; this.repo_mgr = repo_mgr; this.js_wkr = js_wkr;
+ this.usr_dlg = Gfo_usr_dlg_.I; this.repo_mgr = repo_mgr; this.js_wkr = js_wkr;
this.hpg = hpg; this.imgs = imgs; this.exec_tid = exec_tid;
}
public String Name() {return "xowa.load_imgs";}
@@ -109,28 +109,19 @@ public class Xof_file_wkr implements Gfo_thread_wkr {
}
private static void Save_bin(Xof_fsdb_itm itm, Fsm_mnt_mgr mnt_mgr) {
Io_url html_url = itm.Html_view_url();
- long bin_len = Io_mgr._.QueryFil(html_url).Size();
- gplx.ios.Io_stream_rdr bin_rdr = gplx.ios.Io_stream_rdr_.file_(html_url);
+ long rdr_len = Io_mgr._.QueryFil(html_url).Size();
+ Io_stream_rdr rdr = gplx.ios.Io_stream_rdr_.file_(html_url);
try {
- bin_rdr.Open();
- mnt_mgr.Txn_open();
- if (itm.Lnki_ext().Id_is_thumbable_img()) {
- if (itm.File_is_orig())
- mnt_mgr.Img_insert(itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_ext().Id(), itm.Html_w(), itm.Html_h(), Fsd_thm_tbl.Modified_null, Fsd_thm_tbl.Hash_null, bin_len, bin_rdr);
- else
- mnt_mgr.Thm_insert(itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_ext().Id(), itm.Html_w(), itm.Html_h(), itm.Lnki_time(), itm.Lnki_page(), Fsd_thm_tbl.Modified_null, Fsd_thm_tbl.Hash_null, bin_len, bin_rdr);
- }
- else {
- if (itm.Lnki_ext().Id_is_video() && !itm.File_is_orig()) // insert as thumbnail
- mnt_mgr.Thm_insert(itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_ext().Id(), itm.Html_w(), itm.Html_h(), itm.Lnki_time(), itm.Lnki_page(), Fsd_thm_tbl.Modified_null, Fsd_thm_tbl.Hash_null, bin_len, bin_rdr);
- else
- mnt_mgr.Fil_insert(itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_ext().Id(), Fsd_thm_tbl.Modified_null, Fsd_thm_tbl.Hash_null, bin_len, bin_rdr);
- }
- mnt_mgr.Txn_save();
+ rdr.Open();
+ Fsm_mnt_itm mnt_itm = mnt_mgr.Mnts__get_insert();
+ Fsm_atr_fil atr_fil = mnt_itm.Atr_mgr().Db__core();
+ Fsm_bin_fil bin_fil = mnt_itm.Bin_mgr().Dbs__get_nth();
+ Xof_bin_updater bin_updater = new Xof_bin_updater();
+ bin_updater.Save_bin(mnt_itm, atr_fil, bin_fil, itm, rdr, rdr_len);
}
catch (Exception e) {
- Xoa_app_.Usr_dlg().Warn_many("", "", "failed to save file: ttl=~{0} url=~{1} err=~{2}", String_.new_utf8_(itm.Lnki_ttl()), html_url.Raw(), Err_.Message_gplx(e));
+ Xoa_app_.Usr_dlg().Warn_many("", "", "failed to save file: ttl=~{0} url=~{1} err=~{2}", itm.Lnki_ttl(), html_url.Raw(), Err_.Message_gplx(e));
}
- finally {bin_rdr.Rls();}
+ finally {rdr.Rls();}
}
}
diff --git a/400_xowa/src/gplx/xowa/files/Xof_lnki_file_mgr.java b/400_xowa/src/gplx/xowa/files/Xof_lnki_file_mgr.java
index 0058e86ee..3ee61c5fc 100644
--- a/400_xowa/src/gplx/xowa/files/Xof_lnki_file_mgr.java
+++ b/400_xowa/src/gplx/xowa/files/Xof_lnki_file_mgr.java
@@ -30,9 +30,9 @@ public class Xof_lnki_file_mgr {
try {
if (page_init_needed) {
page_init_needed = false;
- wiki.File_mgr().Fsdb_mgr().Init_by_wiki(wiki); // NOTE: fsdb_mgr may not be init'd for wiki; assert that that it is
+ wiki.File_mgr().Init_file_mgr_by_load(wiki); // NOTE: fsdb_mgr may not be init'd for wiki; assert that that it is
Make_fsdb_list(page.Lnki_list(), wiki.File_mgr().Patch_upright()); // NOTE: Patch_upright check must occur after Init_by_wiki; DATE:2014-05-31
- wiki.File_mgr().Fsdb_mgr().Orig_mgr().Find_by_list(orig_regy, fsdb_list, exec_tid);
+ wiki.File_mgr__orig_mgr().Find_by_list(orig_regy, fsdb_list, exec_tid);
Make_fsdb_hash();
}
Xof_fsdb_itm fsdb = (Xof_fsdb_itm)fsdb_hash.Fetch(xfer.Lnki_ttl());
diff --git a/400_xowa/src/gplx/xowa/files/Xof_mime_minor_.java b/400_xowa/src/gplx/xowa/files/Xof_mime_minor_.java
index 047c464e1..91721fb8f 100644
--- a/400_xowa/src/gplx/xowa/files/Xof_mime_minor_.java
+++ b/400_xowa/src/gplx/xowa/files/Xof_mime_minor_.java
@@ -30,24 +30,25 @@ public class Xof_mime_minor_ {
private static final HashAdp mime_hash = mime_hash_();
private static HashAdp mime_hash_() {
HashAdp rv = HashAdp_.new_bry_();
- mime_hash_itm_(rv, Xof_ext_.Bry_png, Xof_ext_.Id_png);
- mime_hash_itm_(rv, Xof_ext_.Bry_jpg, Xof_ext_.Id_jpg);
- mime_hash_itm_(rv, Xof_ext_.Bry_jpeg, Xof_ext_.Id_jpeg);
- mime_hash_itm_(rv, Xof_ext_.Bry_gif, Xof_ext_.Id_gif);
- mime_hash_itm_(rv, Xof_ext_.Bry_tif, Xof_ext_.Id_tif);
- mime_hash_itm_(rv, Xof_ext_.Bry_tiff, Xof_ext_.Id_tiff);
- mime_hash_itm_(rv, Mime_svg, Xof_ext_.Id_svg);
- mime_hash_itm_(rv, Mime_djvu, Xof_ext_.Id_djvu);
- mime_hash_itm_(rv, Xof_ext_.Bry_pdf, Xof_ext_.Id_pdf);
- mime_hash_itm_(rv, Mime_midi, Xof_ext_.Id_mid);
- mime_hash_itm_(rv, Xof_ext_.Bry_ogg, Xof_ext_.Id_ogg);
- mime_hash_itm_(rv, Xof_ext_.Bry_oga, Xof_ext_.Id_oga);
- mime_hash_itm_(rv, Xof_ext_.Bry_ogv, Xof_ext_.Id_ogv);
- mime_hash_itm_(rv, Xof_ext_.Bry_webm, Xof_ext_.Id_webm);
- mime_hash_itm_(rv, Mime_flac, Xof_ext_.Id_flac);
- mime_hash_itm_(rv, Mime_bmp, Xof_ext_.Id_bmp);
- mime_hash_itm_(rv, Mime_bmp_2, Xof_ext_.Id_bmp);
- mime_hash_itm_(rv, Mime_xcf, Xof_ext_.Id_xcf);
+ mime_hash_itm_(rv, Xof_ext_.Bry_png , Xof_ext_.Id_png);
+ mime_hash_itm_(rv, Xof_ext_.Bry_jpg , Xof_ext_.Id_jpg);
+ mime_hash_itm_(rv, Xof_ext_.Bry_jpeg , Xof_ext_.Id_jpeg);
+ mime_hash_itm_(rv, Xof_ext_.Bry_gif , Xof_ext_.Id_gif);
+ mime_hash_itm_(rv, Xof_ext_.Bry_tif , Xof_ext_.Id_tif);
+ mime_hash_itm_(rv, Xof_ext_.Bry_tiff , Xof_ext_.Id_tiff);
+ mime_hash_itm_(rv, Mime_svg , Xof_ext_.Id_svg);
+ mime_hash_itm_(rv, Mime_djvu , Xof_ext_.Id_djvu);
+ mime_hash_itm_(rv, Xof_ext_.Bry_pdf , Xof_ext_.Id_pdf);
+ mime_hash_itm_(rv, Mime_midi , Xof_ext_.Id_mid);
+ mime_hash_itm_(rv, Xof_ext_.Bry_ogg , Xof_ext_.Id_ogg);
+ mime_hash_itm_(rv, Xof_ext_.Bry_oga , Xof_ext_.Id_oga);
+ mime_hash_itm_(rv, Xof_ext_.Bry_ogv , Xof_ext_.Id_ogv);
+ mime_hash_itm_(rv, Xof_ext_.Bry_webm , Xof_ext_.Id_webm);
+ mime_hash_itm_(rv, Mime_flac , Xof_ext_.Id_flac);
+ mime_hash_itm_(rv, Mime_bmp , Xof_ext_.Id_bmp);
+ mime_hash_itm_(rv, Mime_bmp_2 , Xof_ext_.Id_bmp);
+ mime_hash_itm_(rv, Mime_xcf , Xof_ext_.Id_xcf);
+ mime_hash_itm_(rv, Xof_ext_.Bry_wav , Xof_ext_.Id_wav);
return rv;
}
private static void mime_hash_itm_(HashAdp hash, byte[] key, int val) {hash.Add(key, Int_obj_val.new_(val));}
diff --git a/400_xowa/src/gplx/xowa/files/Xog_redlink_thread.java b/400_xowa/src/gplx/xowa/files/Xog_redlink_thread.java
new file mode 100644
index 000000000..232335353
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/files/Xog_redlink_thread.java
@@ -0,0 +1,31 @@
+/*
+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 .
+*/
+package gplx.xowa.files; import gplx.*; import gplx.xowa.*;
+import gplx.threads.*; import gplx.xowa.files.gui.*;
+public class Xog_redlink_thread implements Gfo_thread_wkr {
+ private final int[] redlink_ary; private final Xog_js_wkr js_wkr;
+ public Xog_redlink_thread(int[] redlink_ary, Xog_js_wkr js_wkr) {this.redlink_ary = redlink_ary; this.js_wkr = js_wkr;}
+ public String Name() {return "xowa.gui.html.redlinks.set";}
+ public boolean Resume() {return true;}
+ public void Exec() {
+ int len = redlink_ary.length;
+ for (int i = 0; i < len; ++i) {
+ js_wkr.Html_redlink(gplx.xowa.parsers.lnkis.redlinks.Xopg_redlink_lnki_list.Lnki_id_prefix + Int_.Xto_str(redlink_ary[i]));
+ }
+ }
+}
diff --git a/400_xowa/src/gplx/xowa/files/Xow_file_mgr.java b/400_xowa/src/gplx/xowa/files/Xow_file_mgr.java
index 190c246fb..dc3cabd16 100644
--- a/400_xowa/src/gplx/xowa/files/Xow_file_mgr.java
+++ b/400_xowa/src/gplx/xowa/files/Xow_file_mgr.java
@@ -17,16 +17,18 @@ along with this program. If not, see .
*/
package gplx.xowa.files; import gplx.*; import gplx.xowa.*;
import gplx.dbs.*; import gplx.dbs.cfgs.*;
-import gplx.xowa.files.repos.*; import gplx.xowa.files.fsdb.*; import gplx.fsdb.meta.*; import gplx.xowa.files.origs.*;
-public class Xow_file_mgr implements GfoInvkAble {
+import gplx.xowa.files.repos.*; import gplx.xowa.files.origs.*;
+import gplx.fsdb.*; import gplx.fsdb.meta.*; import gplx.xowa.files.fsdb.*;
+public class Xow_file_mgr implements GfoInvkAble {
private Xof_wkr_mgr wkr_mgr;
public Xow_file_mgr(Xowe_wiki wiki) {
this.wiki = wiki;
repo_mgr = new Xowe_repo_mgr(wiki);
meta_mgr = new Xof_meta_mgr(wiki);
- fsdb_mgr = new Xof_fsdb_mgr__sql();
wkr_mgr = new Xof_wkr_mgr(this);
}
+ public Fsdb_db_mgr Db_core() {return db_core;} private Fsdb_db_mgr db_core;
+ public Xof_orig_mgr Orig_mgr() {return orig_mgr;} private final Xof_orig_mgr orig_mgr = new Xof_orig_mgr();
public Xof_fsdb_mode Fsdb_mode() {
if (fsdb_mode == null) {
Version();
@@ -37,7 +39,7 @@ public class Xow_file_mgr implements GfoInvkAble {
public byte Version() {
if (version == Bool_.__byte) {
Io_url file_dir = wiki.Fsys_mgr().File_dir();
- if (!Io_mgr._.ExistsFil(file_dir.GenSubFil(Fsm_mnt_mgr.Mnt_name))) {
+ if (!Io_mgr._.ExistsFil(file_dir.GenSubFil(Fsdb_db_mgr__v1.Mnt_name))) {
version = Version_1;
fsdb_mode = Xof_fsdb_mode.new_wmf();
}
@@ -68,23 +70,23 @@ public class Xow_file_mgr implements GfoInvkAble {
public Xof_cfg_download Cfg_download() {return cfg_download;} private Xof_cfg_download cfg_download = new Xof_cfg_download();
public void Cfg_set(String grp, String key, String val) { // TEST: should only be called by tests
if (test_grps == null) test_grps = HashAdp_.new_();
- Db_cfg_grp grp_itm = (Db_cfg_grp)test_grps.Fetch(grp);
+ Db_cfg_hash grp_itm = (Db_cfg_hash)test_grps.Fetch(grp);
if (grp_itm == null) {
- grp_itm = new Db_cfg_grp(grp);
+ grp_itm = new Db_cfg_hash(grp);
test_grps.Add(grp, grp_itm);
}
- grp_itm.Upsert(key, val);
+ grp_itm.Set(key, val);
} private HashAdp test_grps;
- public Db_cfg_grp Cfg_get(String grp) {
+ public Db_cfg_hash Cfg_get(String grp) {
if (test_grps != null) {
- Db_cfg_grp rv = (Db_cfg_grp)test_grps.Fetch(grp);
- return rv == null ? Db_cfg_grp.Null : rv;
+ Db_cfg_hash rv = (Db_cfg_hash)test_grps.Fetch(grp);
+ return rv == null ? new Db_cfg_hash("") : rv;
}
- if (this.Version() == Version_1) return Db_cfg_grp.Null;
- fsdb_mgr.Init_by_wiki(wiki); // make sure fsdb is init'd
- return fsdb_mgr.Mnt_mgr().Mnts__at(0).Cfg_mgr().Grps_get_or_load(grp);
+ if (this.Version() == Version_1) return new Db_cfg_hash("");
+ this.Init_file_mgr_by_load(wiki); // make sure fsdb is init'd
+ return fsdb_mgr.Mnt_mgr().Mnts__get_main().Cfg_mgr().Grps_get_or_load(grp);
}
- public Xof_fsdb_mgr Fsdb_mgr() {return fsdb_mgr;} private Xof_fsdb_mgr fsdb_mgr;
+ public Xof_fsdb_mgr Fsdb_mgr() {return fsdb_mgr;} private Xof_fsdb_mgr fsdb_mgr = new Xof_fsdb_mgr__sql();
public boolean Find_meta(Xof_xfer_itm xfer_itm) {
xfer_itm.Trg_repo_idx_(Xof_meta_itm.Repo_unknown);
byte[] xfer_itm_ttl = xfer_itm.Lnki_ttl();
@@ -109,7 +111,16 @@ public class Xow_file_mgr implements GfoInvkAble {
return meta.Orig_exists() == Bool_.Y_byte || meta.Thumbs().length != 0;
}
else
- return fsdb_mgr.Orig_mgr().Find_by_ttl_or_null(ttl_bry) != Xof_orig_itm.Null;
+ return orig_mgr.Find_by_ttl_or_null(ttl_bry) != Xof_orig_itm.Null;
+ }
+ public void Init_file_mgr_by_load(Xow_wiki wiki) {
+ if (db_core != null) return; // already init'd
+ this.db_core = Fsdb_db_mgr_.new_detect(wiki.Domain_str(), wiki.Fsys_mgr().Root_dir(), wiki.Fsys_mgr().File_dir());
+ if (db_core == null ) return; // no fsdb_core found; exit
+ this.version = Version_2;
+ this.fsdb_mode = Xof_fsdb_mode.new_view();
+ orig_mgr.Init_by_wiki(fsdb_mode, db_core.File__orig_tbl_ary(), wiki.Domain_bry(), wiki.App().Wmf_mgr().Download_wkr(), wiki.File_mgr__repo_mgr(), Xof_url_bldr.new_v2_());
+ fsdb_mgr.Init_by_wiki(wiki);
}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
diff --git a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_mgr.java b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_mgr.java
index 3ddd06b1c..97364965c 100644
--- a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_mgr.java
+++ b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_mgr.java
@@ -20,20 +20,37 @@ import gplx.core.primitives.*; import gplx.ios.*;
import gplx.fsdb.meta.*;
import gplx.xowa.files.repos.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.files.cnvs.*; import gplx.xowa.files.caches.*;
import gplx.xowa.wmfs.*;
-public class Xof_bin_mgr implements GfoInvkAble {
- private final Gfo_usr_dlg usr_dlg; private final Fsm_mnt_mgr mnt_mgr; private final Xow_repo_mgr repo_mgr; private final Xof_cache_mgr cache_mgr; private final Xowmf_mgr wmf_mgr; private final Xof_url_bldr url_bldr;
- private Xof_bin_wkr[] wkrs; private int wkrs_len;
+public class Xof_bin_mgr {
+ private final Fsm_mnt_mgr mnt_mgr;
+ private final Gfo_usr_dlg usr_dlg; private final Xow_repo_mgr repo_mgr; private final Xof_cache_mgr cache_mgr; private final Xof_url_bldr url_bldr = Xof_url_bldr.new_v2_();
+ private Xof_bin_wkr[] wkrs = Xof_bin_wkr_.Ary_empty; private int wkrs_len;
private final String_obj_ref resize_warning = String_obj_ref.null_(); private final Xof_img_size tmp_size = new Xof_img_size();
- public Xof_bin_mgr(Fsm_mnt_mgr mnt_mgr, Xow_repo_mgr repo_mgr, Xof_cache_mgr cache_mgr, Xowmf_mgr wmf_mgr, Xof_url_bldr url_bldr) {
- this.mnt_mgr = mnt_mgr; this.repo_mgr = repo_mgr; this.cache_mgr = cache_mgr; this.wmf_mgr = wmf_mgr; this.url_bldr = url_bldr;
- this.usr_dlg = Gfo_usr_dlg_._;
- Wkrs__clear();
+ public Xof_bin_mgr(Fsm_mnt_mgr mnt_mgr, Xow_repo_mgr repo_mgr, Xof_cache_mgr cache_mgr, Xof_img_wkr_resize_img resize_wkr) {
+ this.mnt_mgr = mnt_mgr; this.repo_mgr = repo_mgr; this.cache_mgr = cache_mgr;
+ this.usr_dlg = Gfo_usr_dlg_.I;
+ this.Resizer_(resize_wkr);
}
public void Resizer_(Xof_img_wkr_resize_img v) {resizer = v;} private Xof_img_wkr_resize_img resizer;
- public void Init_by_wiki(Xof_img_wkr_resize_img resize_wkr) {
- this.Wkrs__get_or_new(Xof_bin_wkr_.Key_fsdb_wiki);
- this.Wkrs__get_or_new(Xof_bin_wkr_.Key_http_wmf);
- this.Resizer_(resize_wkr);
+ public void Wkrs__del(String key) {
+ ListAdp list = ListAdp_.new_();
+ for (Xof_bin_wkr wkr : wkrs) {
+ if (String_.Eq(key, wkr.Key())) continue;
+ list.Add(wkr);
+ }
+ this.wkrs = (Xof_bin_wkr[])list.Xto_ary(Xof_bin_wkr.class);
+ this.wkrs_len = wkrs.length;
+ }
+ public void Wkrs__add(Xof_bin_wkr v) {
+ this.wkrs = (Xof_bin_wkr[])Array_.Resize_add_one(wkrs, wkrs_len, v);
+ ++this.wkrs_len;
+ }
+ public Xof_bin_wkr Wkrs__get_or_null(String key) {
+ byte tid = Xof_bin_wkr_.X_key_to_tid(key);
+ for (int i = 0; i < wkrs_len; ++i) {
+ Xof_bin_wkr wkr = wkrs[i];
+ if (wkr.Tid() == tid) return wkr;
+ }
+ return null;
}
public boolean Find_to_url_as_bool(byte exec_tid, Xof_fsdb_itm itm) {return Find_to_url(exec_tid, itm) != Io_url_.Null;}
private Io_url Find_to_url(byte exec_tid, Xof_fsdb_itm itm) {
@@ -95,41 +112,4 @@ public class Xof_bin_mgr implements GfoInvkAble {
itm.File_resized_y_();
return rv;
}
- 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;
- } private static final String Invk_add = "add";
- public void Wkrs__clear() {this.wkrs = Xof_bin_wkr_.Ary_empty; this.wkrs_len = 0;}
- public Xof_bin_wkr Wkrs__get_or_new(String type) {return Wkrs__get_or_new(type, null);}
- private Xof_bin_wkr Wkrs__get_or_new(String type, String key) {
- if (key == null) key = type; // default empty key to type; EX: add('xowa.http.wmf') -> add('xowa.http.wmf', 'xowa.http.wmf')
- Xof_bin_wkr rv = Wkrs__get_or_null(key);
- if (rv == null) {
- rv = Wkrs__new(type);
- Wkrs__add(rv);
- }
- return rv;
- }
- public void Wkrs__add(Xof_bin_wkr v) {Wkrs__add_many(v);}
- private void Wkrs__add_many(Xof_bin_wkr... v) {
- wkrs = (Xof_bin_wkr[])Array_.Resize_add(wkrs, v);
- wkrs_len += v.length;
- }
- private Xof_bin_wkr Wkrs__get_or_null(String key) {
- int wkrs_len = wkrs.length;
- byte tid = Xof_bin_wkr_.X_key_to_tid(key);
- for (int i = 0; i < wkrs_len; ++i) {
- Xof_bin_wkr wkr = wkrs[i];
- if (wkr.Tid() == tid) return wkr;
- }
- return null;
- }
- private Xof_bin_wkr Wkrs__new(String type) {
- Xof_bin_wkr rv = null;
- if (String_.Eq(type, Xof_bin_wkr_.Key_fsdb_wiki)) rv = new Xof_bin_wkr__fsdb_sql(mnt_mgr);
- else if (String_.Eq(type, Xof_bin_wkr_.Key_fsys_wmf)) rv = new Xof_bin_wkr__fsys_wmf();
- else if (String_.Eq(type, Xof_bin_wkr_.Key_http_wmf)) rv = new Xof_bin_wkr__http_wmf(repo_mgr, wmf_mgr.Download_wkr().Download_xrg());
- else throw Err_.unhandled(type);
- return rv;
- }
}
diff --git a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr.java b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr.java
index d2277e3e8..802e3a35b 100644
--- a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr.java
+++ b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr.java
@@ -18,8 +18,9 @@ along with this program. If not, see .
package gplx.xowa.files.bins; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
import gplx.ios.*;
import gplx.xowa.files.fsdb.*;
-public interface Xof_bin_wkr extends GfoInvkAble {
+public interface Xof_bin_wkr {
byte Tid();
+ String Key();
boolean Resize_allowed(); void Resize_allowed_(boolean v);
Io_stream_rdr Get_as_rdr (Xof_fsdb_itm itm, boolean is_thumb, int w);
boolean Get_to_fsys (Xof_fsdb_itm itm, boolean is_thumb, int w, Io_url bin_url);
diff --git a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__fsdb_sql.java b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__fsdb_sql.java
index 1c2f60c98..61120e3e0 100644
--- a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__fsdb_sql.java
+++ b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__fsdb_sql.java
@@ -17,25 +17,26 @@ along with this program. If not, see .
*/
package gplx.xowa.files.bins; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
import gplx.core.primitives.*; import gplx.dbs.*; import gplx.ios.*; import gplx.cache.*; import gplx.xowa.files.fsdb.*;
-import gplx.fsdb.data.*; import gplx.fsdb.meta.*;
-public class Xof_bin_wkr__fsdb_sql implements Xof_bin_wkr, GfoInvkAble {
+import gplx.fsdb.*; import gplx.fsdb.data.*; import gplx.fsdb.meta.*;
+public class Xof_bin_wkr__fsdb_sql implements Xof_bin_wkr {
private final Int_obj_ref tmp_itm_id = Int_obj_ref.neg1_(), tmp_bin_id = Int_obj_ref.neg1_(), tmp_mnt_id = Int_obj_ref.neg1_();
- private final Fsm_mnt_mgr mnt_mgr;
- public Xof_bin_wkr__fsdb_sql(Fsm_mnt_mgr mnt_mgr) {this.mnt_mgr = mnt_mgr;}
+ Xof_bin_wkr__fsdb_sql(Fsm_mnt_mgr mnt_mgr) {this.mnt_mgr = mnt_mgr;}
public byte Tid() {return Xof_bin_wkr_.Tid_fsdb_xowa;}
+ public String Key() {return Xof_bin_wkr_.Key_fsdb_wiki;}
+ public Fsm_mnt_mgr Mnt_mgr() {return mnt_mgr;} private final Fsm_mnt_mgr mnt_mgr;
public boolean Resize_allowed() {return bin_wkr_resize;} public void Resize_allowed_(boolean v) {bin_wkr_resize = v;} private boolean bin_wkr_resize = false;
public Io_stream_rdr Get_as_rdr(Xof_fsdb_itm itm, boolean is_thumb, int w) {
Find_ids(itm, is_thumb, w, tmp_itm_id, tmp_bin_id, tmp_mnt_id);
- int bin_db_id = tmp_bin_id.Val(); if (bin_db_id == Fsd_bin_tbl.Null_db_bin_id) return gplx.ios.Io_stream_rdr_.Null;
+ int bin_db_id = tmp_bin_id.Val(); if (bin_db_id == Fsd_bin_tbl.Bin_db_id_null) return gplx.ios.Io_stream_rdr_.Null;
Fsm_bin_fil bin_db = mnt_mgr.Bins__at(tmp_mnt_id.Val(), bin_db_id);
- return bin_db.Get_as_rdr(tmp_itm_id.Val());
+ return bin_db.Select_as_rdr(tmp_itm_id.Val());
}
public boolean Get_to_fsys(Xof_fsdb_itm itm, boolean is_thumb, int w, Io_url bin_url) {return Get_to_fsys(itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), is_thumb, w, itm.Lnki_time(), itm.Lnki_page(), bin_url);}
private boolean Get_to_fsys(byte[] orig_repo, byte[] orig_ttl, byte[] orig_md5, Xof_ext orig_ext, boolean lnki_is_thumb, int file_w, double lnki_time, int lnki_page, Io_url file_url) {
Find_ids(orig_repo, orig_ttl, orig_ext.Id(), lnki_time, lnki_page, lnki_is_thumb, file_w, tmp_itm_id, tmp_bin_id, tmp_mnt_id);
- int bin_db_id = tmp_bin_id.Val(); if (bin_db_id == Fsd_bin_tbl.Null_db_bin_id) return false;
+ int bin_db_id = tmp_bin_id.Val(); if (bin_db_id == Fsd_bin_tbl.Bin_db_id_null) return false;
Fsm_bin_fil bin_db = mnt_mgr.Bins__at(tmp_mnt_id.Val(), bin_db_id);
- return bin_db.Get_to_url(tmp_itm_id.Val(), file_url);
+ return bin_db.Select_to_url(tmp_itm_id.Val(), file_url);
}
private void Find_ids(Xof_fsdb_itm itm, boolean is_thumb, int w, Int_obj_ref tmp_itm_id, Int_obj_ref tmp_bin_id, Int_obj_ref tmp_mnt_id) {Find_ids(itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_ext().Id(), itm.Lnki_time(), itm.Lnki_page(), is_thumb, w, tmp_itm_id, tmp_bin_id, tmp_mnt_id);}
private void Find_ids(byte[] orig_repo, byte[] orig_ttl, int orig_ext, double lnki_time, int lnki_page, boolean is_thumb, int w, Int_obj_ref tmp_itm_id, Int_obj_ref tmp_bin_id, Int_obj_ref tmp_mnt_id) {
@@ -45,23 +46,40 @@ public class Xof_bin_wkr__fsdb_sql implements Xof_bin_wkr, GfoInvkAble {
if (is_thumb) {
Fsd_thm_itm thm_itm = Fsd_thm_itm.new_();
thm_itm.Init_by_req(w, lnki_time, lnki_page);
- boolean found = mnt_mgr.Thm_select_bin(dir, fil, thm_itm);
- tmp_itm_id.Val_(thm_itm.Id());
- tmp_bin_id.Val_(found ? thm_itm.Db_bin_id() : Fsd_bin_tbl.Null_db_bin_id);
+ boolean found = Select_thm_bin(thm_itm, dir, fil);
+ tmp_itm_id.Val_(thm_itm.Thm_id());
+ tmp_bin_id.Val_(found ? thm_itm.Db_bin_id() : Fsd_bin_tbl.Bin_db_id_null);
tmp_mnt_id.Val_(thm_itm.Mnt_id());
}
else {
- Fsd_fil_itm fil_itm = mnt_mgr.Fil_select_bin(dir, fil, is_thumb, w, time);
- tmp_itm_id.Val_(fil_itm.Id());
- tmp_bin_id.Val_(fil_itm.Db_bin_id());
+ Fsd_fil_itm fil_itm = Select_fil_bin(dir, fil, is_thumb, w, time);
+ if (fil_itm == Fsd_fil_itm.Null) return;
+ tmp_itm_id.Val_(fil_itm.Fil_id());
+ tmp_bin_id.Val_(fil_itm.Bin_db_id());
tmp_mnt_id.Val_(fil_itm.Mnt_id());
}
}
}
- public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
- if (ctx.MatchIn(k, Invk_url_)) mnt_mgr.Init_by_wiki(m.ReadIoUrl("v"), Bool_.Y);
- else return GfoInvkAble_.Rv_unhandled;
- return this;
- } private static final String Invk_url_ = "url_";
-}
-
+ private Fsd_fil_itm Select_fil_bin(byte[] dir, byte[] fil, boolean is_thumb, int width, double thumbtime) {
+ int len = mnt_mgr.Mnts__len();
+ for (int i = 0; i < len; i++) {
+ Fsd_fil_itm rv = mnt_mgr.Mnts__get_at(i).Select_fil_or_null(dir, fil, is_thumb, width, thumbtime);
+ if ( rv != Fsd_fil_itm.Null
+ && rv.Bin_db_id() != Fsd_bin_tbl.Bin_db_id_null) { // NOTE: mnt_0 can have thumb, but mnt_1 can have itm; check for itm with Db_bin_id; DATE:2013-11-16
+ return rv;
+ }
+ }
+ return Fsd_fil_itm.Null;
+ }
+ private boolean Select_thm_bin(Fsd_thm_itm rv, byte[] dir, byte[] fil) {
+ int len = mnt_mgr.Mnts__len();
+ for (int i = 0; i < len; i++) {
+ boolean exists = mnt_mgr.Mnts__get_at(i).Select_thm(rv, dir, fil);
+ if (exists) return true;
+ }
+ return false;
+ }
+ public void Txn_bgn() {mnt_mgr.Mnts__get_insert().Txn_bgn();}
+ public void Txn_end() {mnt_mgr.Mnts__get_insert().Txn_end();}
+ public static Xof_bin_wkr__fsdb_sql new_(Fsm_mnt_mgr mnt_mgr) {return new Xof_bin_wkr__fsdb_sql(mnt_mgr);}
+}
diff --git a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__fsys_base.java b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__fsys_base.java
index 595c4aadb..e39bde78c 100644
--- a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__fsys_base.java
+++ b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__fsys_base.java
@@ -21,6 +21,7 @@ import gplx.xowa.files.fsdb.*; import gplx.xowa.files.repos.*;
public abstract class Xof_bin_wkr__fsys_base implements Xof_bin_wkr, GfoInvkAble {
public Xof_bin_wkr__fsys_base() {}
public abstract byte Tid();
+ public abstract String Key();
public boolean Resize_allowed() {return resize_allowed;} public void Resize_allowed_(boolean v) {resize_allowed = v;} private boolean resize_allowed = false;
public Io_stream_rdr Get_as_rdr(Xof_fsdb_itm itm, boolean is_thumb, int w) {
byte mode = is_thumb ? Xof_repo_itm.Mode_thumb : Xof_repo_itm.Mode_orig;
@@ -55,12 +56,14 @@ abstract class Xof_bin_wkr__fsys_wmf_base extends Xof_bin_wkr__fsys_base {
}
class Xof_bin_wkr__fsys_wmf extends Xof_bin_wkr__fsys_wmf_base {
@Override public byte Tid() {return Xof_bin_wkr_.Tid_fsys_wmf;}
+ @Override public String Key() {return Xof_bin_wkr_.Key_fsys_wmf;}
@Override public void Init_by_root() {
this.Url_bldr().Init_by_root(Bry_.Empty, Op_sys.Cur().Fsys_dir_spr_byte(), Bool_.Y, Bool_.Y, Xof_repo_itm.Dir_depth_wmf);
}
}
class Xof_bin_wkr__fsys_xowa extends Xof_bin_wkr__fsys_wmf_base {
@Override public byte Tid() {return Xof_bin_wkr_.Tid_fsys_xowa;}
+ @Override public String Key() {return Xof_bin_wkr_.Key_fsys_xowa;}
@Override public void Init_by_root() {
this.Url_bldr().Init_by_root(Bry_.Empty, Op_sys.Cur().Fsys_dir_spr_byte(), Bool_.N, Bool_.N, Xof_repo_itm.Dir_depth_xowa);
}
diff --git a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__http_wmf.java b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__http_wmf.java
index e09865d83..a38c370c3 100644
--- a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__http_wmf.java
+++ b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__http_wmf.java
@@ -22,6 +22,7 @@ public class Xof_bin_wkr__http_wmf implements Xof_bin_wkr {
private final Xof_url_bldr url_bldr = new Xof_url_bldr();
public Xof_bin_wkr__http_wmf(Xow_repo_mgr repo_mgr, gplx.ios.IoEngine_xrg_downloadFil download_wkr) {this.repo_mgr = repo_mgr; this.download_wkr = download_wkr;}
public byte Tid() {return Xof_bin_wkr_.Tid_http_wmf;}
+ public String Key() {return Xof_bin_wkr_.Key_http_wmf;}
public boolean Resize_allowed() {return bin_wkr_resize;} public void Resize_allowed_(boolean v) {bin_wkr_resize = v;} private boolean bin_wkr_resize = true;
public int Fail_timeout() {return fail_timeout;} public Xof_bin_wkr__http_wmf Fail_timeout_(int v) {fail_timeout = v; return this;} private int fail_timeout = 0; // NOTE: always default to 0; manually set to 1000 for fsdb_make only; DATE:2014-06-21
public Io_stream_rdr Get_as_rdr(Xof_fsdb_itm fsdb, boolean is_thumb, int w) {
@@ -59,5 +60,5 @@ public class Xof_bin_wkr__http_wmf implements Xof_bin_wkr {
else return GfoInvkAble_.Rv_unhandled;
return this;
} private static final String Invk_fail_timeout_ = "fail_timeout_";
-
+ public static Xof_bin_wkr__http_wmf new_(Xow_wiki wiki) {return new Xof_bin_wkr__http_wmf(wiki.File_mgr__repo_mgr(), wiki.App().Wmf_mgr().Download_wkr().Download_xrg());}
}
diff --git a/400_xowa/src/gplx/xowa/files/caches/Xofc_cache_itm.java b/400_xowa/src/gplx/xowa/files/caches/Xof_cache_itm.java
similarity index 68%
rename from 400_xowa/src/gplx/xowa/files/caches/Xofc_cache_itm.java
rename to 400_xowa/src/gplx/xowa/files/caches/Xof_cache_itm.java
index 786e27e34..e6c653f0b 100644
--- a/400_xowa/src/gplx/xowa/files/caches/Xofc_cache_itm.java
+++ b/400_xowa/src/gplx/xowa/files/caches/Xof_cache_itm.java
@@ -16,33 +16,23 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.files.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
-class Xofc_cache_itm {
- public Xofc_cache_itm
- ( Bry_bfr lnki_key_bfr, int uid, byte db_state
- , int lnki_wiki, byte[] lnki_ttl, int lnki_type, double lnki_upright, int lnki_w, int lnki_h, double lnki_time, int lnki_page
+import gplx.dbs.*;
+public class Xof_cache_itm {
+ public Xof_cache_itm
+ ( Bry_bfr lnki_key_bfr, byte db_state
+ , int lnki_site, byte[] lnki_ttl, int lnki_type, double lnki_upright, int lnki_w, int lnki_h, double lnki_time, int lnki_page
, int orig_wiki, byte[] orig_ttl, int orig_ext, int file_w, int file_h, double file_time, int file_page
, long temp_file_size, int temp_view_count, long temp_view_date, int temp_w
) {
- this.uid = uid; this.db_state = db_state;
- this.lnki_wiki = lnki_wiki; this.lnki_ttl = lnki_ttl; this.lnki_type = lnki_type; this.lnki_upright = lnki_upright; this.lnki_w = lnki_w; this.lnki_h = lnki_h; this.lnki_time = lnki_time; this.lnki_page = lnki_page;
+ this.db_state = db_state;
+ this.lnki_site = lnki_site; this.lnki_ttl = lnki_ttl; this.lnki_type = lnki_type; this.lnki_upright = lnki_upright; this.lnki_w = lnki_w; this.lnki_h = lnki_h; this.lnki_time = lnki_time; this.lnki_page = lnki_page;
this.orig_wiki = orig_wiki; this.orig_ttl = orig_ttl; this.orig_ext = orig_ext; this.file_w = file_w; this.file_h = file_h; this.file_time = file_time; this.file_page = file_page;
this.temp_file_size = temp_file_size; this.temp_view_count = temp_view_count; this.temp_view_date = temp_view_date; this.temp_w = temp_w;
- lnki_key_bfr
- .Add_int_variable(lnki_wiki).Add_byte_pipe()
- .Add(lnki_ttl).Add_byte_pipe()
- .Add_int_variable(lnki_type).Add_byte_pipe()
- .Add_double(lnki_upright).Add_byte_pipe()
- .Add_int_variable(lnki_w).Add_byte_pipe()
- .Add_int_variable(lnki_h).Add_byte_pipe()
- .Add_double(lnki_time).Add_byte_pipe()
- .Add_int_variable(lnki_page)
- ;
- lnki_key = lnki_key_bfr.Xto_bry_and_clear();
+ this.lnki_key = Key_gen(lnki_key_bfr, lnki_site, lnki_ttl, lnki_type, lnki_upright, lnki_w, lnki_h, lnki_time, lnki_page);
}
- public int Uid() {return uid;} private int uid;
public byte Db_state() {return db_state;} public void Db_state_(byte v) {db_state = v;} private byte db_state;
public byte[] Lnki_key() {return lnki_key;} private final byte[] lnki_key;
- public int Lnki_wiki() {return lnki_wiki;} private final int lnki_wiki;
+ public int Lnki_site() {return lnki_site;} private final int lnki_site;
public byte[] Lnki_ttl() {return lnki_ttl;} private final byte[] lnki_ttl;
public int Lnki_type() {return lnki_type;} private final int lnki_type;
public double Lnki_upright() {return lnki_upright;} private final double lnki_upright;
@@ -61,5 +51,25 @@ class Xofc_cache_itm {
public int Temp_view_count() {return temp_view_count;} private int temp_view_count;
public long Temp_view_date() {return temp_view_date;} private long temp_view_date;
public int Temp_w() {return temp_w;} private int temp_w;
- public static final Xofc_cache_itm Null = null;
+ public boolean File_is_orig() {return file_is_orig;} public boolean file_is_orig;
+ public Io_url Temp_file_url() {return temp_file_url;} public Io_url temp_file_url;
+ public void Update_view_stats() {
+ ++temp_view_count;
+ temp_view_date = DateAdp_.Now().Timestamp_unix();
+ db_state = Db_cmd_mode.To_update(db_state);
+ }
+ public static final Xof_cache_itm Null = null;
+ public static byte[] Key_gen(Bry_bfr key_bfr, int site, byte[] ttl, int type, double upright, int w, int h, double time, int page) {
+ key_bfr
+ .Add_int_variable(site).Add_byte_pipe()
+ .Add(ttl).Add_byte_pipe()
+ .Add_int_variable(type).Add_byte_pipe()
+ .Add_double(upright).Add_byte_pipe()
+ .Add_int_variable(w).Add_byte_pipe()
+ .Add_int_variable(h).Add_byte_pipe()
+ .Add_double(time).Add_byte_pipe()
+ .Add_int_variable(page)
+ ;
+ return key_bfr.Xto_bry_and_clear();
+ }
}
diff --git a/400_xowa/src/gplx/xowa/files/caches/Xof_cache_mgr.java b/400_xowa/src/gplx/xowa/files/caches/Xof_cache_mgr.java
index d3632ca6a..2b4b8a127 100644
--- a/400_xowa/src/gplx/xowa/files/caches/Xof_cache_mgr.java
+++ b/400_xowa/src/gplx/xowa/files/caches/Xof_cache_mgr.java
@@ -47,19 +47,6 @@ public class Xof_cache_mgr implements GfoInvkAble {
fil_mgr.Cleanup();
} catch (Exception e) {usr_dlg.Warn_many("", "", "cache_mgr.term:fatal error: err=~{0}", Err_.Message_gplx_brief(e));}
}
- public Xofc_dir_itm Dir__get_or_make(byte[] dir) {return dir_mgr.Get_by_name_or_make(dir);}
- public Xofc_fil_itm Fil__get_or_null(byte[] dir, byte[] ttl, boolean is_orig, int w, double time, int page) {
- Xofc_dir_itm dir_itm = dir_mgr.Get_by_name_or_null(dir); if (dir_itm == null) return null;
- return fil_mgr.Get_or_null(dir_itm.Id(), ttl, is_orig, w, time, page);
- }
- public Xofc_fil_itm Fil__make(byte[] dir, byte[] ttl, boolean is_orig, int w, int h, double time, int page, long size) {
- Xofc_dir_itm dir_itm = dir_mgr.Get_by_name_or_make(dir);
- return fil_mgr.Make_v2(dir_itm.Id(), ttl, is_orig, w, h, time, page, Xof_ext_.new_by_ttl_(ttl), size);
- }
- public void Fil__update(Xofc_fil_itm fil) {
- fil.Cache_time_now_();
- if (fil.Cmd_mode() == Db_cmd_mode.Tid_create) cfg_mgr.Cache_len_add(fil.Size());
- }
public Xofc_fil_itm Reg(Xof_fsdb_itm itm, long bin_len) {return this.Reg(itm.Orig_repo_name(), itm.Lnki_ttl(), itm.File_is_orig(), itm.File_w(), itm.File_w(), itm.Lnki_time(), itm.Lnki_ext(), bin_len, DateAdp_.MaxValue, "");}
private Xofc_fil_itm Reg(byte[] repo, byte[] ttl, boolean fil_is_orig, int fil_w, int fil_h, double fil_thumbtime, Xof_ext ext, long bin_len, DateAdp modified, String hash) {
int dir_id = dir_mgr.Get_by_name_or_make(repo).Id();
diff --git a/400_xowa/src/gplx/xowa/files/caches/Xof_cache_mgr2.java b/400_xowa/src/gplx/xowa/files/caches/Xof_cache_mgr2.java
new file mode 100644
index 000000000..507edb04b
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/files/caches/Xof_cache_mgr2.java
@@ -0,0 +1,151 @@
+/*
+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 .
+*/
+package gplx.xowa.files.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
+import gplx.core.primitives.*; import gplx.dbs.*;
+import gplx.xowa.files.fsdb.*; import gplx.xowa2.files.*; import gplx.xowa.wikis.*;
+public class Xof_cache_mgr2 {
+ private Xof_cache_tbl tbl; private final Bry_bfr key_bfr = Bry_bfr.reset_(512);
+ private final OrderedHash hash = OrderedHash_.new_bry_(); // private final Xof_url_bldr url_bldr = Xof_url_bldr.new_v2_();
+ private Db_conn conn; private int site;
+ private long cache_size = -1, cache_min = Io_mgr.Len_mb * 75, cache_max = Io_mgr.Len_mb * 100;
+ public void Conn_(Db_conn conn, boolean created, int site) {
+ this.conn = conn; this.site = site;
+ this.tbl = new Xof_cache_tbl(conn);
+ if (created) tbl.Create_tbl();
+ }
+ public Xof_cache_itm Get_or_null(Xof_fsdb_itm fsdb) {return Get_or_null(fsdb.Lnki_ttl(), fsdb.Lnki_type(), fsdb.Lnki_upright(), fsdb.Lnki_w(), fsdb.Lnki_h(), fsdb.Lnki_time(), fsdb.Lnki_page());}
+ public Xof_cache_itm Get_or_null(byte[] ttl, int type, double upright, int w, int h, double time, int page) {
+ synchronized (hash) {
+ byte[] key = Xof_cache_itm.Key_gen(key_bfr, site, ttl, type, upright, w, h, time, page);
+ Xof_cache_itm rv = (Xof_cache_itm)hash.Fetch(key);
+ if (rv == Xof_cache_itm.Null) {
+ rv = tbl.Select_one(site, ttl, type, upright, w, h, time, page);
+ if (rv == Xof_cache_itm.Null) return Xof_cache_itm.Null;
+ hash.Add(key, rv);
+ }
+ return rv;
+ }
+ }
+ public void Update(Xof_fsdb_itm fsdb) {
+ synchronized (hash) {
+ Xof_cache_itm itm = Get_or_null(fsdb.Lnki_ttl(), fsdb.Lnki_type(), fsdb.Lnki_upright(), fsdb.Lnki_w(), fsdb.Lnki_h(), fsdb.Lnki_time(), fsdb.Lnki_page());
+ if (itm == Xof_cache_itm.Null) {
+ itm = new Xof_cache_itm(key_bfr, Db_cmd_mode.Tid_create, site, fsdb.Lnki_ttl(), fsdb.Lnki_type(), fsdb.Lnki_upright(), fsdb.Lnki_w(), fsdb.Lnki_h(), fsdb.Lnki_time(), fsdb.Lnki_page()
+ , fsdb.Orig_repo_id(), fsdb.Orig_ttl(), fsdb.Orig_ext(), fsdb.Orig_w(), fsdb.Orig_h()
+ , fsdb.Lnki_time(), fsdb.Lnki_page(), fsdb.Temp_file_size(), 1, DateAdp_.Now().Timestamp_unix(), fsdb.Temp_file_w())
+ ;
+ hash.Add(itm.Lnki_key(), itm);
+ cache_size += itm.Temp_file_size();
+ }
+ else
+ itm.Update_view_stats();
+ }
+ }
+ public void Page_bgn() {
+ if (cache_size == -1) {
+ cache_size = tbl.Select_max_size();
+ tbl.Select_all(key_bfr, hash);
+ }
+ }
+ public void Page_end() { // threaded
+ this.Db_save();
+ if (cache_size > cache_max) this.Compress(cache_min);
+ }
+ private void Db_save() {
+ synchronized (hash) {
+ try {
+ conn.Txn_bgn();
+ int len = hash.Count();
+ for (int i = 0; i < len; ++i) {
+ Xof_cache_itm itm = (Xof_cache_itm)hash.FetchAt(i);
+ tbl.Db_save(itm);
+ }
+ conn.Txn_end();
+ }
+ catch (Exception e) {conn.Txn_cxl(); throw Err_.err_(e);}
+ }
+ }
+ public long Compress(long cache_min) {
+ synchronized (hash) {
+ try {
+ Xoa_app_.Usr_dlg().Note_many("", "", "cache compress started");
+ this.Db_save(); tbl.Select_all(key_bfr, hash); // save and load
+ hash.SortBy(Xof_cache_mgr_sorter.I); // sorts by cache_time desc
+ int len = hash.Count();
+ long cache_size_actl = 0, cache_size_temp = 0;
+ ListAdp deleted = ListAdp_.new_();
+ tbl.Conn().Txn_bgn();
+ for (int i = 0; i < len; ++i) { // iterate over entire hash to figure out what to delete
+ Xof_cache_itm itm = (Xof_cache_itm)hash.FetchAt(i);
+ long itm_size = itm.Temp_file_size();
+ cache_size_temp = cache_size_actl + itm_size;
+ if (cache_size_temp > cache_min)
+ deleted.Add(itm);
+ else
+ cache_size_actl = cache_size_temp;
+ }
+ len = deleted.Count();
+ conn.Txn_bgn();
+ for (int i = 0; i < len; i++) { // iterate over deleted and delete
+ Xof_cache_itm itm = (Xof_cache_itm)deleted.FetchAt(i);
+ hash.Del(itm.Lnki_key());
+ itm.Db_state_(Db_cmd_mode.Tid_delete);
+ tbl.Db_save(itm);
+ Io_mgr._.DeleteFil(itm.Temp_file_url());
+ cache_size -= itm.Temp_file_size();
+ }
+ conn.Txn_end();
+ Xoa_app_.Usr_dlg().Note_many("", "", "cache compress done");
+ return cache_size_actl;
+ }
+ catch (Exception e) {Xoa_app_.Usr_dlg().Warn_many("", "", "failed to compress cache: err=~{0}", Err_.Message_gplx_brief(e)); return cache_min;}
+ finally {tbl.Conn().Txn_end();}
+ }
+ }
+// private Io_url Calc_url(Xof_url_bldr url_bldr, Xoa_wiki_mgr wiki_mgr, Xof_cache_itm itm) {
+// byte mode_id = itm.File_is_orig() ? gplx.xowa.files.repos.Xof_repo_itm.Mode_orig : gplx.xowa.files.repos.Xof_repo_itm.Mode_thumb;
+// byte[] wiki_domain = Xow_domain_tid_.To_domain(itm.Lnki_site()).Domain_bry();
+// Xow_wiki wiki = wiki_mgr.Get_by_key_or_make(wiki_domain);
+// gplx.xowa.files.repos.Xof_repo_itm trg_repo = wiki.File_mgr__repo_mgr().Repos_get_by_wiki(wiki_domain).Trg();
+// byte[] ttl = itm.Lnki_ttl();
+// byte[] md5 = Xof_xfer_itm_.Md5_(ttl);
+// Xof_ext itm_ext = Xof_ext_.new_by_id_(itm.Orig_ext());
+// return url_bldr.Init_for_trg_file(mode_id, trg_repo, ttl, md5, itm_ext, itm.Temp_w()
+// , Xof_lnki_time.Convert_to_xowa_thumbtime (itm_ext.Id(), itm.File_time())
+// , Xof_lnki_time.Convert_to_xowa_page (itm_ext.Id(), itm.File_page())
+// ).Xto_url();
+// }
+ public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
+ if (ctx.Match(k, Invk_cache_min)) return cache_min / Io_mgr.Len_mb;
+ else if (ctx.Match(k, Invk_cache_min_)) cache_min = m.ReadLong("v") * Io_mgr.Len_mb;
+ else if (ctx.Match(k, Invk_cache_max)) return cache_max / Io_mgr.Len_mb;
+ else if (ctx.Match(k, Invk_cache_max_)) cache_max = m.ReadLong("v") * Io_mgr.Len_mb;
+ else if (ctx.Match(k, Invk_cache_compress)) this.Compress(cache_min);
+ else return GfoInvkAble_.Rv_unhandled;
+ return this;
+ }
+ private static final String Invk_cache_min = "cache_min", Invk_cache_min_ = "cache_min_", Invk_cache_max = "cache_max", Invk_cache_max_ = "cache_max_", Invk_cache_compress = "cache_compress";
+}
+class Xof_cache_mgr_sorter implements gplx.lists.ComparerAble {
+ public int compare(Object lhsObj, Object rhsObj) {
+ Xof_cache_itm lhs = (Xof_cache_itm)lhsObj;
+ Xof_cache_itm rhs = (Xof_cache_itm)rhsObj;
+ return -Long_.Compare(lhs.Temp_view_date(), rhs.Temp_view_date()); // - for DESC sort
+ }
+ public static final Xof_cache_mgr_sorter I = new Xof_cache_mgr_sorter(); Xof_cache_mgr_sorter() {}
+}
diff --git a/400_xowa/src/gplx/xowa/files/caches/Xof_cache_mgr_tst.java b/400_xowa/src/gplx/xowa/files/caches/Xof_cache_mgr_tst.java
new file mode 100644
index 000000000..ae29b7d39
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/files/caches/Xof_cache_mgr_tst.java
@@ -0,0 +1,72 @@
+/*
+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 .
+*/
+package gplx.xowa.files.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
+import org.junit.*; import gplx.dbs.*;
+public class Xof_cache_mgr_tst {
+// @Before public void init() {fxt.Reset();} private Xof_cache_mgr_fxt fxt = new Xof_cache_mgr_fxt();
+ @Test public void Basic() {
+// Xof_cache_itm itm = fxt.Bldr_itm("A.png").Make();
+// fxt.Test_get_n(itm);
+// fxt.Exec_update(itm);
+// fxt.Test_get_y(itm);
+// fxt.Test_viewed_data(1, 123);
+// fxt.Exec_update(itm);
+// fxt.Test_viewed_data(2, 124);
+// fxt.Exec_db_save(itm);
+// fxt.Test_db_itms(itm);
+ }
+}
+// class Xof_cache_mgr_fxt {
+// public Xof_cache_mgr_fxt Reset() {
+// return this;
+// }
+// }
+// class Xof_cache_itm_mkr {
+//// private byte[] dir; private byte[] ttl; private boolean is_orig; private int w, h; private double time; private int page; private long size;
+// private byte db_state;
+// private int lnki_site; private byte[] lnki_ttl; private int lnki_type; private double lnki_upright; private int lnki_w; private int lnki_h; private double lnki_time; private int lnki_page;
+// private int orig_wiki; private byte[] orig_ttl; private int orig_ext; private int file_w; private int file_h; private double file_time; private int file_page;
+// private long temp_file_size; private int temp_view_count; private long temp_view_date; private int temp_w;
+// private Bry_bfr key_bfr = Bry_bfr.new_();
+// public Xof_cache_itm_mkr() {this.Reset();}
+// private void Reset() {
+// db_state = Db_cmd_mode.Tid_ignore;
+// lnki_site = orig_wiki = -1;
+// lnki_ttl = orig_ttl = null;
+// lnki_type = Byte_.Max_value_127;
+// lnki_upright = Xof_img_size.Upright_null;
+// lnki_w = lnki_h = file_w = file_h = temp_w = Xof_img_size.Size_null;
+// lnki_time = file_time = Xof_lnki_time.Null;
+// lnki_page = file_page = Xof_lnki_page.Null;
+// orig_ext = Xof_ext_.Id_unknown;
+// temp_file_size = -1;
+// temp_view_count = -1;
+// temp_view_date = -1;
+// }
+// public Xof_cache_itm_mkr Init(String dir_str, String ttl_str, boolean is_orig, int w) {
+//// this.dir = Bry_.new_utf8_(dir_str);
+//// this.ttl = Bry_.new_utf8_(ttl_str);
+//// this.is_orig = is_orig;
+//// this.w = w;
+// return this;
+// }
+// public Xof_cache_itm Make() {
+// return new Xof_cache_itm(key_bfr, db_state, lnki_site, lnki_ttl, lnki_type, lnki_upright, lnki_w, lnki_h, file_w, file_h, );
+// this.Reset();
+// }
+// }
diff --git a/400_xowa/src/gplx/xowa/files/caches/Xofc_cache_tbl.java b/400_xowa/src/gplx/xowa/files/caches/Xof_cache_tbl.java
similarity index 54%
rename from 400_xowa/src/gplx/xowa/files/caches/Xofc_cache_tbl.java
rename to 400_xowa/src/gplx/xowa/files/caches/Xof_cache_tbl.java
index 9d984c0db..1ffc1ad78 100644
--- a/400_xowa/src/gplx/xowa/files/caches/Xofc_cache_tbl.java
+++ b/400_xowa/src/gplx/xowa/files/caches/Xof_cache_tbl.java
@@ -17,20 +17,19 @@ along with this program. If not, see .
*/
package gplx.xowa.files.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
import gplx.dbs.*;
-class Xofc_cache_tbl {
+public class Xof_cache_tbl implements RlsAble {
private String tbl_name = "user_file_cache"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
private String
- fld_uid
- , fld_lnki_wiki, fld_lnki_ttl, fld_lnki_type, fld_lnki_upright, fld_lnki_w, fld_lnki_h, fld_lnki_time, fld_lnki_page
+ fld_lnki_site, fld_lnki_ttl, fld_lnki_type, fld_lnki_upright, fld_lnki_w, fld_lnki_h, fld_lnki_time, fld_lnki_page
, fld_orig_wiki, fld_orig_ttl, fld_orig_ext, fld_file_w, fld_file_h, fld_file_time, fld_file_page
, fld_temp_file_size, fld_temp_view_count, fld_temp_view_date, fld_temp_w
;
- private Db_conn conn; private final Db_stmt_bldr stmt_bldr = new Db_stmt_bldr(); private Db_stmt select_stmt;
+ private final Db_conn conn; private final Db_stmt_bldr stmt_bldr = new Db_stmt_bldr(); private Db_stmt select_stmt;
private final Bry_bfr lnki_key_bfr = Bry_bfr.reset_(255);
- public void Conn_(Db_conn new_conn, boolean created) {
- this.conn = new_conn; flds.Clear();
- fld_uid = flds.Add_int_pkey_autonum("uid");
- fld_lnki_wiki = flds.Add_int("lnki_wiki");
+ public Db_conn Conn() {return conn;}
+ public Xof_cache_tbl(Db_conn conn) {
+ this.conn = conn;
+ fld_lnki_site = flds.Add_int("lnki_site");
fld_lnki_ttl = flds.Add_str("lnki_ttl", 255);
fld_lnki_type = flds.Add_int("lnki_type");
fld_lnki_upright = flds.Add_double("lnki_upright");
@@ -49,21 +48,24 @@ class Xofc_cache_tbl {
fld_temp_view_count = flds.Add_int("temp_view_count");
fld_temp_view_date = flds.Add_long("temp_view_date");
fld_temp_w = flds.Add_int("temp_w");
- if (created) {
- Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
- , Db_meta_idx.new_normal_by_tbl(tbl_name, "main", fld_lnki_wiki, fld_lnki_ttl, fld_lnki_type, fld_lnki_upright, fld_lnki_w, fld_lnki_h, fld_lnki_time, fld_lnki_page)
- );
- conn.Exec_create_tbl_and_idx(meta);
- }
- select_stmt = null;
- stmt_bldr.Conn_(conn, tbl_name, flds, fld_uid);
+ stmt_bldr.Conn_(conn, tbl_name, flds, fld_lnki_site, fld_lnki_ttl, fld_lnki_type, fld_lnki_upright, fld_lnki_w, fld_lnki_h, fld_lnki_time, fld_lnki_page);
+ conn.Rls_reg(this);
}
- public Xofc_cache_itm Select_one(int lnki_wiki, byte[] lnki_ttl, int lnki_type, double lnki_upright, int lnki_w, int lnki_h, double lnki_time, int lnki_page) {
- if (select_stmt == null) select_stmt = conn.Rls_reg(conn.Stmt_select(tbl_name, flds, String_.Ary(fld_lnki_wiki, fld_lnki_ttl, fld_lnki_type, fld_lnki_upright, fld_lnki_w, fld_lnki_h, fld_lnki_time, fld_lnki_page)));
- Db_rdr rdr = Db_rdr_.Null;
- try {
- rdr = select_stmt.Clear()
- .Crt_int (fld_lnki_wiki , lnki_wiki)
+ public void Rls() {
+ select_stmt = Db_stmt_.Rls(select_stmt);
+ }
+ public void Create_tbl() {
+ Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
+ , Db_meta_idx.new_unique_by_tbl(tbl_name, "main", fld_lnki_site, fld_lnki_ttl, fld_lnki_type, fld_lnki_upright, fld_lnki_w, fld_lnki_h, fld_lnki_time, fld_lnki_page)
+ , Db_meta_idx.new_normal_by_tbl(tbl_name, "size", fld_temp_file_size)
+ , Db_meta_idx.new_normal_by_tbl(tbl_name, "date", fld_temp_view_date)
+ );
+ conn.Ddl_create_tbl(meta);
+ }
+ public Xof_cache_itm Select_one(int lnki_site, byte[] lnki_ttl, int lnki_type, double lnki_upright, int lnki_w, int lnki_h, double lnki_time, int lnki_page) {
+ if (select_stmt == null) select_stmt = conn.Stmt_select(tbl_name, flds, String_.Ary(fld_lnki_site, fld_lnki_ttl, fld_lnki_type, fld_lnki_upright, fld_lnki_w, fld_lnki_h, fld_lnki_time, fld_lnki_page));
+ Db_rdr rdr = select_stmt.Clear()
+ .Crt_int (fld_lnki_site , lnki_site)
.Crt_bry_as_str (fld_lnki_ttl , lnki_ttl)
.Crt_int (fld_lnki_type , lnki_type)
.Crt_double (fld_lnki_upright , lnki_upright)
@@ -71,40 +73,68 @@ class Xofc_cache_tbl {
.Crt_int (fld_lnki_h , lnki_h)
.Crt_double (fld_lnki_time , lnki_time)
.Crt_int (fld_lnki_page , lnki_page)
- .Exec_select_as_rdr();
- return rdr.Move_next() ? new_itm(rdr) : Xofc_cache_itm.Null;
- }
+ .Exec_select__rls_manual();
+ try {return rdr.Move_next() ? new_itm(rdr) : Xof_cache_itm.Null;}
finally {rdr.Rls();}
}
public void Select_all(Bry_bfr fil_key_bldr, OrderedHash hash) {
hash.Clear();
- Db_stmt stmt = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empy);
- Db_rdr rdr = Db_rdr_.Null;
+ Db_rdr rdr = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empy).Exec_select__rls_auto();
try {
- rdr = stmt.Exec_select_as_rdr();
while (rdr.Move_next()) {
- Xofc_cache_itm itm = new_itm(rdr);
+ Xof_cache_itm itm = new_itm(rdr);
byte[] key = Bry_.Empty;
hash.Add(key, itm);
}
}
finally {rdr.Rls();}
}
- public void Db_save(Xofc_cache_itm itm) {
+ public long Select_max_size() {
+ Db_rdr rdr = conn.Stmt_new(gplx.dbs.qrys.Db_qry_sql.rdr_(String_.Format("SELECT Max({0}) FROM {1}", fld_temp_file_size, tbl_name))).Exec_select__rls_auto();
+ try {
+ return rdr.Move_next() ? rdr.Read_long(fld_temp_file_size) : 0;
+ }
+ finally {rdr.Rls();}
+ }
+ public void Db_save(Xof_cache_itm itm) {
try {
Db_stmt stmt = stmt_bldr.Get(itm.Db_state());
switch (itm.Db_state()) {
- case Db_cmd_mode.Tid_create: stmt.Clear().Val_int(fld_uid, itm.Uid()); Db_save_modify(stmt, itm); stmt.Exec_insert(); break;
- case Db_cmd_mode.Tid_update: stmt.Clear(); Db_save_modify(stmt, itm); stmt.Crt_int(fld_uid, itm.Uid()).Exec_update(); break;
- case Db_cmd_mode.Tid_delete: stmt.Clear().Crt_int(fld_uid, itm.Uid()); stmt.Exec_delete(); break;
+ case Db_cmd_mode.Tid_create: stmt.Clear(); Db_save_crt(stmt, itm, Bool_.Y); Db_save_val(stmt, itm); stmt.Exec_insert(); break;
+ case Db_cmd_mode.Tid_update: stmt.Clear(); Db_save_val(stmt, itm); Db_save_crt(stmt, itm, Bool_.N); stmt.Exec_update(); break;
+ case Db_cmd_mode.Tid_delete: stmt.Clear(); Db_save_crt(stmt, itm, Bool_.N); stmt.Exec_delete(); break;
case Db_cmd_mode.Tid_ignore: break;
default: throw Err_.unhandled(itm.Db_state());
}
itm.Db_state_(Db_cmd_mode.Tid_ignore);
} catch (Exception e) {stmt_bldr.Rls(); throw Err_.err_(e, Err_.Message_gplx(e));}
}
- private void Db_save_modify(Db_stmt stmt, Xofc_cache_itm itm) {
- stmt.Val_int (itm.Lnki_wiki())
+ private void Db_save_crt(Db_stmt stmt, Xof_cache_itm itm, boolean insert) {
+ if (insert) {
+ stmt.Val_int (itm.Lnki_site())
+ .Val_bry_as_str (itm.Lnki_ttl())
+ .Val_int (itm.Lnki_type())
+ .Val_double (itm.Lnki_upright())
+ .Val_int (itm.Lnki_w())
+ .Val_int (itm.Lnki_h())
+ .Val_double (itm.Lnki_time())
+ .Val_int (itm.Lnki_page())
+ ;
+ }
+ else {
+ stmt.Crt_int (fld_lnki_site, itm.Lnki_site())
+ .Crt_bry_as_str (fld_lnki_ttl, itm.Lnki_ttl())
+ .Crt_int (fld_lnki_type, itm.Lnki_type())
+ .Crt_double (fld_lnki_upright, itm.Lnki_upright())
+ .Crt_int (fld_lnki_w, itm.Lnki_w())
+ .Crt_int (fld_lnki_h, itm.Lnki_h())
+ .Crt_double (fld_lnki_time, itm.Lnki_time())
+ .Crt_int (fld_lnki_page, itm.Lnki_page())
+ ;
+ }
+ }
+ private void Db_save_val(Db_stmt stmt, Xof_cache_itm itm) {
+ stmt.Val_int (itm.Lnki_site())
.Val_bry_as_str (itm.Lnki_ttl())
.Val_int (itm.Lnki_type())
.Val_double (itm.Lnki_upright())
@@ -125,12 +155,11 @@ class Xofc_cache_tbl {
.Val_int (itm.Temp_w())
;
}
- private Xofc_cache_itm new_itm(Db_rdr rdr) {
- return new Xofc_cache_itm
+ private Xof_cache_itm new_itm(Db_rdr rdr) {
+ return new Xof_cache_itm
( lnki_key_bfr
- , rdr.Read_int (fld_uid)
, Db_cmd_mode.Tid_ignore
- , rdr.Read_int (fld_lnki_wiki)
+ , rdr.Read_int (fld_lnki_site)
, rdr.Read_bry_by_str (fld_lnki_ttl)
, rdr.Read_int (fld_lnki_type)
, rdr.Read_double (fld_lnki_upright)
diff --git a/400_xowa/src/gplx/xowa/files/caches/Xofc_cfg_mgr.java b/400_xowa/src/gplx/xowa/files/caches/Xofc_cfg_mgr.java
index 2f0bc7b0f..2f32e9fe9 100644
--- a/400_xowa/src/gplx/xowa/files/caches/Xofc_cfg_mgr.java
+++ b/400_xowa/src/gplx/xowa/files/caches/Xofc_cfg_mgr.java
@@ -16,33 +16,34 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.files.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
-import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.xowa.dbs.tbls.*;
+import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.xowa.wikis.data.tbls.*;
class Xofc_cfg_mgr {
- private final Db_cfg_tbl tbl = new Db_cfg_tbl();
+ private Db_cfg_tbl tbl;
public int Next_id() {return next_id++;} public void Next_id_(int v) {next_id = v;} private int next_id;
public long Cache_len() {return cache_len;} public void Cache_len_(long v) {cache_len = v;} private long cache_len = 0;
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 schema_is_1) {
- tbl.Conn_(v, created, schema_is_1, "xowa_cfg", "file_cache_cfg");
+ tbl = new Db_cfg_tbl(v, 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));
- tbl.Insert(Cfg_grp, Cfg_key__cache_min, Long_.Xto_str(cache_min));
- tbl.Insert(Cfg_grp, Cfg_key__cache_max, Long_.Xto_str(cache_max));
+ tbl.Create_tbl();
+ tbl.Insert_int(Cfg_grp, Cfg_key__next_id, 1);
+ tbl.Insert_int(Cfg_grp, Cfg_key__cache_len, 0);
+ tbl.Insert_long(Cfg_grp, Cfg_key__cache_min, cache_min);
+ tbl.Insert_long(Cfg_grp, Cfg_key__cache_max, cache_max);
}
else {
- next_id = tbl.Select_as_int_or_fail(Cfg_grp, Cfg_key__next_id);
- cache_len = tbl.Select_as_int_or_fail(Cfg_grp, Cfg_key__cache_len);
- cache_max = tbl.Select_as_int_or_fail(Cfg_grp, Cfg_key__cache_max);
+ next_id = tbl.Select_int(Cfg_grp, Cfg_key__next_id);
+ cache_len = tbl.Select_int(Cfg_grp, Cfg_key__cache_len);
+ cache_max = tbl.Select_int(Cfg_grp, Cfg_key__cache_max);
}
}
public void Save_all() {
- tbl.Update(Cfg_grp, Cfg_key__next_id, Int_.Xto_str(next_id));
- tbl.Update(Cfg_grp, Cfg_key__cache_len, Long_.Xto_str(cache_len));
- tbl.Update(Cfg_grp, Cfg_key__cache_min, Long_.Xto_str(cache_min));
- tbl.Update(Cfg_grp, Cfg_key__cache_max, Long_.Xto_str(cache_max));
+ tbl.Update_int(Cfg_grp, Cfg_key__next_id, next_id);
+ tbl.Update_long(Cfg_grp, Cfg_key__cache_len, cache_len);
+ tbl.Update_long(Cfg_grp, Cfg_key__cache_min, cache_min);
+ tbl.Update_long(Cfg_grp, Cfg_key__cache_max, cache_max);
}
public void Cleanup() {}
private static final String Cfg_grp = "fsdb.cache", Cfg_key__next_id = "next_id", Cfg_key__cache_min = "cache_min", Cfg_key__cache_max = "cache_max", Cfg_key__cache_len = "cache_len";
diff --git a/400_xowa/src/gplx/xowa/files/caches/Xofc_dir_mgr.java b/400_xowa/src/gplx/xowa/files/caches/Xofc_dir_mgr.java
index 1cf58f708..160965ba6 100644
--- a/400_xowa/src/gplx/xowa/files/caches/Xofc_dir_mgr.java
+++ b/400_xowa/src/gplx/xowa/files/caches/Xofc_dir_mgr.java
@@ -81,12 +81,12 @@ class Xofc_dir_mgr {
private void Db_recalc_next_id(Xofc_dir_itm itm, String err) {
if (String_.Has(err, "PRIMARY KEY must be unique")) { // primary key exception in strange situations (multiple xowas at same time)
int next_id = tbl.Select_max_uid() + 1;
- Gfo_usr_dlg_._.Warn_many("", "", "uid out of sync; incrementing; uid=~{0} name=~{1} err=~{2}", itm.Id(), String_.new_utf8_(itm.Name()), err);
+ Gfo_usr_dlg_.I.Warn_many("", "", "uid out of sync; incrementing; uid=~{0} name=~{1} err=~{2}", itm.Id(), String_.new_utf8_(itm.Name()), err);
itm.Id_(next_id);
cache_mgr.Next_id_(next_id + 1);
err = tbl.Db_save(itm);
if (err == null) return;
}
- Gfo_usr_dlg_._.Warn_many("", "", "failed to save uid; uid=~{0} name=~{1} err=~{2}", itm.Id(), String_.new_utf8_(itm.Name()), err);
+ Gfo_usr_dlg_.I.Warn_many("", "", "failed to save uid; uid=~{0} name=~{1} err=~{2}", itm.Id(), String_.new_utf8_(itm.Name()), err);
}
}
diff --git a/400_xowa/src/gplx/xowa/files/caches/Xofc_dir_tbl.java b/400_xowa/src/gplx/xowa/files/caches/Xofc_dir_tbl.java
index 7533fc047..e4ca8987a 100644
--- a/400_xowa/src/gplx/xowa/files/caches/Xofc_dir_tbl.java
+++ b/400_xowa/src/gplx/xowa/files/caches/Xofc_dir_tbl.java
@@ -17,7 +17,7 @@ along with this program. If not, see .
*/
package gplx.xowa.files.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
import gplx.dbs.*; import gplx.dbs.engines.sqlite.*;
-class Xofc_dir_tbl {
+class Xofc_dir_tbl implements RlsAble {
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;
@@ -34,9 +34,13 @@ class Xofc_dir_tbl {
Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
, Db_meta_idx.new_normal_by_tbl(tbl_name, "name", fld_name)
);
- conn.Exec_create_tbl_and_idx(meta);
+ conn.Ddl_create_tbl(meta);
}
stmt_bldr.Conn_(conn, tbl_name, flds, fld_id);
+ conn.Rls_reg(this);
+ }
+ public void Rls() {
+ select_stmt = Db_stmt_.Rls(select_stmt);
}
public String Db_save(Xofc_dir_itm itm) {
try {
@@ -60,20 +64,17 @@ class Xofc_dir_tbl {
stmt_bldr.Rls();
}
public Xofc_dir_itm Select_one(byte[] name) {
- if (select_stmt == null) select_stmt = conn.Rls_reg(conn.Stmt_select(tbl_name, flds, fld_name));
- Db_rdr rdr = Db_rdr_.Null;
+ if (select_stmt == null) select_stmt = conn.Stmt_select(tbl_name, flds, fld_name);
+ Db_rdr rdr = select_stmt.Clear().Crt_bry_as_str(fld_name, name).Exec_select__rls_manual();
try {
- rdr = select_stmt.Clear().Crt_bry_as_str(fld_name, name).Exec_select_as_rdr();
return rdr.Move_next() ? new_itm(rdr) : Xofc_dir_itm.Null;
}
finally {rdr.Rls();}
}
public void Select_all(ListAdp list) {
list.Clear();
- Db_stmt select_all_stmt = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empy);
- Db_rdr rdr = Db_rdr_.Null;
+ Db_rdr rdr = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empy).Exec_select__rls_auto();
try {
- rdr = select_all_stmt.Exec_select_as_rdr();
while (rdr.Move_next())
list.Add(new_itm(rdr));
}
diff --git a/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_mgr.java b/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_mgr.java
index 456289e54..e34bef3cb 100644
--- a/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_mgr.java
+++ b/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_mgr.java
@@ -85,7 +85,7 @@ class Xofc_fil_mgr {
long cur_size = 0, actl_size = 0;
Xof_url_bldr url_bldr = new Xof_url_bldr();
ListAdp deleted = ListAdp_.new_();
- tbl.Conn().Txn_mgr().Txn_bgn_if_none();
+ tbl.Conn().Txn_bgn();
long compress_to = cfg_mgr.Cache_min();
for (int i = 0; i < len; ++i) {
Xofc_fil_itm itm = (Xofc_fil_itm)hash.FetchAt(i);
@@ -115,7 +115,7 @@ class Xofc_fil_mgr {
catch (Exception e) {
usr_dlg.Warn_many("", "", "failed to compress cache: err=~{0}", Err_.Message_gplx_brief(e));
}
- finally {tbl.Conn().Txn_mgr().Txn_end_all();}
+ finally {tbl.Conn().Txn_end();}
}
private void Fsys_delete(Xof_url_bldr url_bldr, Xoa_wiki_mgr wiki_mgr, Xoa_repo_mgr repo_mgr, Xofc_dir_mgr dir_mgr, Xofc_fil_itm itm) {
byte mode_id = itm.Is_orig() ? Xof_repo_itm.Mode_orig : Xof_repo_itm.Mode_thumb;
@@ -133,17 +133,17 @@ class Xofc_fil_mgr {
Io_mgr._.DeleteFil_args(fil_url).MissingFails_off().Exec();
itm.Cmd_mode_delete_();
}
- public void Cleanup() {tbl.Cleanup();}
+ public void Cleanup() {tbl.Rls();}
private void Db_recalc_next_id(Xofc_fil_itm fil_itm, String err_msg) {
if (String_.Has(err_msg, "PRIMARY KEY must be unique")) { // primary key exception in strange situations (multiple xowas at same time)
int next_id = tbl.Select_max_uid() + 1;
- Gfo_usr_dlg_._.Warn_many("", "", "uid out of sync; incrementing; uid=~{0} name=~{1} err=~{2}", fil_itm.Uid(), String_.new_utf8_(fil_itm.Name()), err_msg);
+ Gfo_usr_dlg_.I.Warn_many("", "", "uid out of sync; incrementing; uid=~{0} name=~{1} err=~{2}", fil_itm.Uid(), String_.new_utf8_(fil_itm.Name()), err_msg);
fil_itm.Uid_(next_id);
cache_mgr.Next_id_(next_id + 1);
err_msg = tbl.Db_save(fil_itm);
if (err_msg == null)
return;
}
- Gfo_usr_dlg_._.Warn_many("", "", "failed to save uid; uid=~{0} name=~{1} err=~{2}", fil_itm.Uid(), String_.new_utf8_(fil_itm.Name()), err_msg);
+ Gfo_usr_dlg_.I.Warn_many("", "", "failed to save uid; uid=~{0} name=~{1} err=~{2}", fil_itm.Uid(), String_.new_utf8_(fil_itm.Name()), err_msg);
}
}
diff --git a/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_tbl.java b/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_tbl.java
index a87926547..425e8978d 100644
--- a/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_tbl.java
+++ b/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_tbl.java
@@ -17,7 +17,7 @@ along with this program. If not, see .
*/
package gplx.xowa.files.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
import gplx.dbs.*; import gplx.dbs.engines.sqlite.*;
-class Xofc_fil_tbl {
+class Xofc_fil_tbl implements RlsAble {
private String tbl_name = "file_cache_fil"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
private String fld_uid, fld_dir_id, fld_name, fld_is_orig, fld_w, fld_h, fld_time, fld_page, fld_ext, fld_size, fld_cache_time;
private Db_conn conn; private final Db_stmt_bldr stmt_bldr = new Db_stmt_bldr(); private Db_stmt select_itm_stmt, select_itm_v2_stmt;
@@ -49,10 +49,16 @@ class Xofc_fil_tbl {
Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
, Db_meta_idx.new_normal_by_tbl(tbl_name, "fil", fld_name, fld_is_orig, fld_w, fld_h, fld_time, fld_cache_time, fld_uid)
);
- conn.Exec_create_tbl_and_idx(meta);
+ conn.Ddl_create_tbl(meta);
}
select_itm_stmt = select_itm_v2_stmt = null;
stmt_bldr.Conn_(conn, tbl_name, flds, fld_uid);
+ conn.Rls_reg(this);
+ }
+ public void Rls() {
+ select_itm_stmt = Db_stmt_.Rls(select_itm_stmt);
+ select_itm_v2_stmt = Db_stmt_.Rls(select_itm_v2_stmt);
+ stmt_bldr.Rls();
}
public String Db_save(Xofc_fil_itm itm) {
try {
@@ -84,53 +90,45 @@ class Xofc_fil_tbl {
.Val_long(fld_cache_time, itm.Cache_time())
;
}
- public void Cleanup() {
- select_itm_stmt = Db_stmt_.Rls(select_itm_stmt);
- stmt_bldr.Rls();
- }
public Xofc_fil_itm Select_one_v1(int dir_id, byte[] fil_name, boolean fil_is_orig, int fil_w, int fil_h, double fil_thumbtime) {
- if (select_itm_stmt == null) select_itm_stmt = conn.Rls_reg(conn.Stmt_select(tbl_name, flds, String_.Ary(fld_dir_id, fld_name, fld_is_orig, fld_w, fld_h, fld_time)));
- Db_rdr rdr = Db_rdr_.Null;
- try {
- rdr = select_itm_stmt.Clear()
+ if (select_itm_stmt == null) select_itm_stmt = conn.Stmt_select(tbl_name, flds, String_.Ary(fld_dir_id, fld_name, fld_is_orig, fld_w, fld_h, fld_time));
+ Db_rdr rdr = select_itm_stmt.Clear()
.Crt_int(fld_dir_id, dir_id)
.Crt_bry_as_str(fld_name, fil_name)
.Crt_bool_as_byte(fld_is_orig, fil_is_orig)
.Crt_int(fld_w, fil_w)
.Crt_int(fld_h, fil_h)
.Crt_int(fld_time, Xof_lnki_time.Db_save_int(fil_thumbtime))
- .Exec_select_as_rdr();
+ .Exec_select__rls_manual();
+ try {
return rdr.Move_next() ? new_itm(rdr) : Xofc_fil_itm.Null;
}
finally {rdr.Rls();}
}
public Xofc_fil_itm Select_one_v2(int dir_id, byte[] name, boolean is_orig, int w, double time, int page) {
- if (select_itm_v2_stmt == null) select_itm_v2_stmt = conn.Rls_reg(conn.Stmt_select(tbl_name, flds, String_.Ary(fld_dir_id, fld_name, fld_is_orig, fld_w, fld_time, fld_page)));
- Db_rdr rdr = Db_rdr_.Null;
- try {
- rdr = select_itm_v2_stmt.Clear()
+ if (select_itm_v2_stmt == null) select_itm_v2_stmt = conn.Stmt_select(tbl_name, flds, String_.Ary(fld_dir_id, fld_name, fld_is_orig, fld_w, fld_time, fld_page));
+ Db_rdr rdr = select_itm_v2_stmt.Clear()
.Crt_int(fld_dir_id, dir_id)
.Crt_bry_as_str(fld_name, name)
.Crt_bool_as_byte(fld_is_orig, is_orig)
.Crt_int(fld_w, w)
.Crt_int(fld_time, Xof_lnki_time.Db_save_int(time))
.Crt_int(fld_page, page)
- .Exec_select_as_rdr();
+ .Exec_select__rls_manual();
+ try {
return rdr.Move_next() ? new_itm(rdr) : Xofc_fil_itm.Null;
}
finally {rdr.Rls();}
}
public void Select_all(Bry_bfr fil_key_bldr, OrderedHash hash) {
hash.Clear();
- Db_stmt select_all_stmt = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empy);
- Db_rdr rdr = Db_rdr_.Null;
+ Db_rdr rdr = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empy).Exec_select__rls_auto();
try {
- rdr = select_all_stmt.Exec_select_as_rdr();
while (rdr.Move_next()) {
Xofc_fil_itm fil_itm = new_itm(rdr);
byte[] key = fil_itm.Gen_hash_key_v1(fil_key_bldr);
if (hash.Has(key)) // NOTE: need to check for uniqueness else dupe file will cause select to fail; shouldn't happen, but somehow did; DATE:2013-12-28
- Gfo_usr_dlg_._.Warn_many("", "", "cache had duplicate itm: key=~{0}", String_.new_utf8_(key));
+ Gfo_usr_dlg_.I.Warn_many("", "", "cache had duplicate itm: key=~{0}", String_.new_utf8_(key));
else
hash.Add(key, fil_itm);
}
diff --git a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_itm.java b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_itm.java
index 2bed97f4e..0947cb27f 100644
--- a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_itm.java
+++ b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_itm.java
@@ -44,6 +44,9 @@ public class Xof_fsdb_itm {
public Io_url Html_orig_url() {return html_orig_url;} private Io_url html_orig_url = Io_url_.Null;
public int Gallery_mgr_h() {return gallery_mgr_h;} private int gallery_mgr_h = Int_.Neg1;
public Js_img_wkr Html_img_wkr() {return html_img_wkr;} private Js_img_wkr html_img_wkr;
+ public int Temp_file_w() {return temp_file_w;} private int temp_file_w;
+ public long Temp_file_size() {return temp_file_size;} private long temp_file_size;
+ public Io_url Temp_file_url() {return temp_file_url;} private Io_url temp_file_url;
public boolean Orig_exists() {return orig_exists;} public void Orig_exists_y_() {orig_exists = Bool_.Y;} public void Orig_exists_n_() {orig_exists = Bool_.N;} private boolean orig_exists;
public boolean File_exists() {return file_exists;} public void File_exists_y_() {file_exists = Bool_.Y;} public void File_exists_n_() {file_exists = Bool_.N;} public void File_exists_(boolean v) {file_exists = v;} private boolean file_exists;
public boolean File_resized() {return file_resized;} public void File_resized_y_() {file_resized = Bool_.Y;} private boolean file_resized;
@@ -71,7 +74,7 @@ public class Xof_fsdb_itm {
html_orig_url = url_bldr.To_url_trg(repo, this, Bool_.Y);
}
public void Ctor_by_fsdb_make
- ( byte[] lnki_ttl, int lnki_w, int lnki_h, double lnki_time, int lnki_page
+ ( byte[] lnki_ttl, int lnki_ext, int lnki_w, int lnki_h, double lnki_time, int lnki_page
, byte orig_repo_id, int orig_w, int orig_h, byte[] orig_redirect
, boolean file_is_orig
) {
@@ -80,7 +83,9 @@ public class Xof_fsdb_itm {
this.file_is_orig = file_is_orig;
this.html_w = lnki_w; this.html_h = lnki_h; // set html_size as file_size (may try to optimize later by removing similar thumbs (EX: 220,221 -> 220))
this.Lnki_ttl_(lnki_ttl);
+ this.lnki_ext = Xof_ext_.new_by_id_(lnki_ext); // NOTE: data in fsdb_make may override lnki_ext; EX: ttl=A.png; but ext=".jpg"
}
+ public void Init_temp(int temp_file_w, long temp_file_size, Io_url temp_file_url) {this.temp_file_w = temp_file_w; this.temp_file_size = temp_file_size; this.temp_file_url = temp_file_url;}
public void Lnki_ext_(Xof_ext v) {lnki_ext = v;}
public void Lnki_size_(int w, int h) {this.lnki_w = w; this.lnki_h = h;}
public void Orig_repo_name_(byte[] v) {orig_repo_name = v;}
diff --git a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr.java b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr.java
index 577b1f205..95e17bdef 100644
--- a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr.java
+++ b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr.java
@@ -18,8 +18,7 @@ along with this program. If not, see .
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.gui.*;
-public interface Xof_fsdb_mgr extends RlsAble {
- Xof_orig_mgr Orig_mgr();
+public interface Xof_fsdb_mgr {
Xof_bin_mgr Bin_mgr();
Fsm_mnt_mgr Mnt_mgr();
void Init_by_wiki(Xow_wiki wiki);
diff --git a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr__sql.java b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr__sql.java
index a03d7f6a3..8f1864472 100644
--- a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr__sql.java
+++ b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr__sql.java
@@ -21,51 +21,37 @@ import gplx.dbs.*; import gplx.xowa.wikis.data.*;
import gplx.fsdb.*; import gplx.fsdb.meta.*;
import gplx.xowa.files.*; import gplx.xowa.files.repos.*; import gplx.xowa.files.imgs.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.caches.*; import gplx.xowa.files.gui.*;
public class Xof_fsdb_mgr__sql implements Xof_fsdb_mgr, GfoInvkAble {
- private boolean init = false; private boolean fsdb_enabled = false; private Xof_cache_mgr cache_mgr; private Xow_repo_mgr repo_mgr; private Xof_url_bldr url_bldr; private final Xof_img_size img_size = new Xof_img_size();
- public Xof_orig_mgr Orig_mgr() {return orig_mgr;} private final Xof_orig_mgr orig_mgr = new Xof_orig_mgr();
+ private boolean init = false; private boolean fsdb_enabled = false;
+ private Xof_cache_mgr cache_mgr; private Xow_repo_mgr repo_mgr; private Xof_url_bldr url_bldr; private final Xof_img_size img_size = new Xof_img_size();
public Xof_bin_mgr Bin_mgr() {return bin_mgr;} private Xof_bin_mgr bin_mgr;
- public Fsm_mnt_mgr Mnt_mgr() {return mnt_mgr;} private final Fsm_mnt_mgr mnt_mgr = new Fsm_mnt_mgr();
+ public Fsm_mnt_mgr Mnt_mgr() {return mnt_mgr;} private Fsm_mnt_mgr mnt_mgr = new Fsm_mnt_mgr();
public void Init_by_wiki(Xow_wiki wiki) {
if (init) return;
try {
init = true;
- // wiki.Rls_list().Add(this);
- Xow_core_data_mgr core_data_mgr = wiki.Data_mgr__core_mgr();
- boolean schema_is_1 = core_data_mgr == null ? Bool_.Y : core_data_mgr.Cfg__schema_is_1(); // TEST: needed b/c some tests rely on txt_data_mgr
+ if (wiki.File_mgr__fsdb_mode().Tid_wmf()) return;
Xoa_app app = wiki.App();
this.cache_mgr = app.File_mgr__cache_mgr(); this.url_bldr = Xof_url_bldr.new_v2_();
this.repo_mgr = wiki.File_mgr__repo_mgr(); Xof_img_mgr img_mgr = app.File_mgr__img_mgr();
- Io_url db_dir = wiki.Fsys_mgr().File_dir();
- Xof_fsdb_mode fsdb_mode = wiki.File_mgr__fsdb_mode();
- orig_mgr.Init_by_wiki(db_dir, schema_is_1, wiki.Domain_bry(), app.Wmf_mgr().Download_wkr(), repo_mgr, url_bldr, fsdb_mode);
- if (wiki.File_mgr__fsdb_mode().Tid_wmf()) return;
+ Fsdb_db_mgr core = Fsdb_db_mgr_.new_detect(wiki.Domain_str(), wiki.Fsys_mgr().Root_dir(), wiki.Fsys_mgr().File_dir());
+ if (core == null) return;
fsdb_enabled = true;
- mnt_mgr.Init_by_wiki(db_dir, schema_is_1);
- this.bin_mgr = new Xof_bin_mgr(mnt_mgr, repo_mgr, cache_mgr, app.Wmf_mgr(), url_bldr);
- bin_mgr.Init_by_wiki(img_mgr.Wkr_resize_img());
+ mnt_mgr.Ctor_by_load(core);
+ this.bin_mgr = new Xof_bin_mgr(mnt_mgr, repo_mgr, cache_mgr, img_mgr.Wkr_resize_img());
+ bin_mgr.Wkrs__add(Xof_bin_wkr__fsdb_sql.new_(mnt_mgr));
+ bin_mgr.Wkrs__add(Xof_bin_wkr__http_wmf.new_(wiki));
} catch (Exception exc) {throw Err_.new_fmt_("failed to initialize fsdb_mgr: wiki={0) err={1}", wiki.Domain_str(), Err_.Message_gplx_brief(exc));}
}
public void Fsdb_search_by_list(byte exec_tid, ListAdp itms, Xoa_page page, Xog_js_wkr js_wkr) {
if (!fsdb_enabled) return;
int len = itms.Count();
- Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_._;
+ Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_.I;
for (int i = 0; i < len; i++) {
if (usr_dlg.Canceled()) return;
Xof_fsdb_itm itm = (Xof_fsdb_itm)itms.FetchAt(i);
Xof_file_wkr.Show_img(exec_tid, itm, usr_dlg, bin_mgr, mnt_mgr, cache_mgr, repo_mgr, js_wkr, img_size, url_bldr, page);
}
}
- public void Txn_save() {
- if (!fsdb_enabled) return;
- mnt_mgr.Txn_save();
- orig_mgr.Txn_save();
- }
- public void Rls() {
- if (!fsdb_enabled) return;
- this.Txn_save(); // NOTE: must call save, else user db will not update next id; DATE:2014-02-11
- mnt_mgr.Rls();
- orig_mgr.Rls();
- }
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_mnt_mgr)) return mnt_mgr;
else return GfoInvkAble_.Rv_unhandled;
diff --git a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_dir.java b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_dir.java
index 7603a4146..42cc78d8b 100644
--- a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_dir.java
+++ b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_dir.java
@@ -25,9 +25,9 @@ class Fs_root_dir {
private Orig_fil_mgr cache = new Orig_fil_mgr(), fs_fil_mgr;
private Db_conn conn; private Db_cfg_tbl cfg_tbl; private Orig_fil_tbl fil_tbl;
private int fil_id_next = 0;
- public void Init(Io_url url, Db_cfg_tbl cfg_tbl, Orig_fil_tbl fil_tbl, Gfo_usr_dlg usr_dlg, Xof_img_wkr_query_img_size img_size_wkr) {
+ public void Init(Io_url url, Orig_fil_tbl fil_tbl, Gfo_usr_dlg usr_dlg, Xof_img_wkr_query_img_size img_size_wkr) {
this.url = url;
- this.cfg_tbl = cfg_tbl; this.fil_tbl = fil_tbl; this.usr_dlg = usr_dlg; this.img_size_wkr = img_size_wkr;
+ this.fil_tbl = fil_tbl; this.usr_dlg = usr_dlg; this.img_size_wkr = img_size_wkr;
}
public Orig_fil_itm Get_by_ttl(byte[] lnki_ttl) {
Orig_fil_itm rv = (Orig_fil_itm)cache.Get_by_ttl(lnki_ttl);
@@ -55,7 +55,7 @@ class Fs_root_dir {
if (Xof_ext_.Id_is_image(rv.Fil_ext_id()))
img_size = img_size_wkr.Exec(rv.Fil_url());
rv.Init_by_size(++fil_id_next, img_size.Width(), img_size.Height());
- cfg_tbl.Update(Cfg_grp_root_dir, Cfg_key_fil_id_next, Int_.Xto_str(fil_id_next));
+ cfg_tbl.Update_int(Cfg_grp_root_dir, Cfg_key_fil_id_next, fil_id_next);
fil_tbl.Insert(rv);
return rv;
}
@@ -77,21 +77,22 @@ class Fs_root_dir {
}
return rv;
}
- private static final String Db_conn_bldr_type = "gplx.xowa.fs_root";
private Db_conn Init_db_fil_mgr() {
Io_url db_url = url.GenSubFil("^orig_regy.sqlite3");
boolean created = false; boolean schema_is_1 = Bool_.Y;
- Db_conn conn = Db_conn_bldr.I.Get(Db_conn_bldr_type, db_url);
+ Db_conn conn = Db_conn_bldr.I.Get(db_url);
if (conn == null) {
- conn = Db_conn_bldr.I.New(Db_conn_bldr_type, db_url);
+ conn = Db_conn_bldr.I.New(db_url);
created = true;
}
- cfg_tbl.Conn_(conn, created, schema_is_1, Fsm_abc_mgr.Cfg_tbl_v1, Fsm_abc_mgr.Cfg_tbl_v2);
+ cfg_tbl = new Db_cfg_tbl(conn, schema_is_1 ? "fsdb_cfg" : "xowa_cfg");
fil_tbl.Conn_(conn, created, schema_is_1);
- if (created)
- cfg_tbl.Insert(Cfg_grp_root_dir, Cfg_key_fil_id_next, Int_.Xto_str(fil_id_next));
+ if (created) {
+ cfg_tbl.Create_tbl();
+ cfg_tbl.Insert_int(Cfg_grp_root_dir, Cfg_key_fil_id_next, fil_id_next);
+ }
else {
- fil_id_next = cfg_tbl.Select_as_int_or_fail(Cfg_grp_root_dir, Cfg_key_fil_id_next);
+ fil_id_next = cfg_tbl.Select_int(Cfg_grp_root_dir, Cfg_key_fil_id_next);
}
return conn;
}
diff --git a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_dir_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_dir_tst.java
index 718d75b48..5cea68b67 100644
--- a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_dir_tst.java
+++ b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_dir_tst.java
@@ -45,10 +45,9 @@ class Fs_root_dir_fxt {
Io_mgr._.InitEngine_mem();
url = Io_url_.mem_dir_("mem/dir/");
root_dir = new Fs_root_dir();
- Db_cfg_tbl cfg_tbl = new Db_cfg_tbl();
orig_fil_tbl = new Orig_fil_tbl();
Xof_img_wkr_query_img_size img_size_wkr = new Xof_img_wkr_query_img_size_test();
- root_dir.Init(url, cfg_tbl, orig_fil_tbl, Gfo_usr_dlg_.Null, img_size_wkr);
+ root_dir.Init(url, orig_fil_tbl, Gfo_usr_dlg_.Null, img_size_wkr);
}
public Orig_fil_mok itm_() {return new Orig_fil_mok();}
public void Init_fs(String url, int w, int h) {Save_img(url, w, h);}
diff --git a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_fsdb_mgr.java b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_fsdb_mgr.java
index 106b8ecff..b89105aa0 100644
--- a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_fsdb_mgr.java
+++ b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_fsdb_mgr.java
@@ -43,7 +43,6 @@ public class Fs_root_fsdb_mgr implements Xof_fsdb_mgr, GfoInvkAble { // read ima
else return GfoInvkAble_.Rv_unhandled;
return this;
} private static final String Invk_root_dir_ = "root_dir_", Invk_orig_dir_ = "orig_dir_", Invk_thumb_dir_ = "thumb_dir_";
- public Xof_orig_mgr Orig_mgr() {throw Err_.not_implemented_();}
public Xof_bin_mgr Bin_mgr() {throw Err_.not_implemented_();}
public Fsm_mnt_mgr Mnt_mgr() {throw Err_.not_implemented_();}
public void Rls() {}
diff --git a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_wkr_fsdb.java b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_wkr_fsdb.java
index b69f3da22..3c46c9dae 100644
--- a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_wkr_fsdb.java
+++ b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_wkr_fsdb.java
@@ -64,7 +64,7 @@ public class Fs_root_wkr_fsdb {
orig_dir_mgr_init(orig_dir);
}
private void orig_dir_mgr_init(Io_url orig_dir) {
- orig_dir_mgr.Init(orig_dir, new Db_cfg_tbl(), new Orig_fil_tbl(), wiki.Appe().Usr_dlg(), wiki.Appe().File_mgr().Img_mgr().Wkr_query_img_size());
+ orig_dir_mgr.Init(orig_dir, new Orig_fil_tbl(), wiki.Appe().Usr_dlg(), wiki.Appe().File_mgr().Img_mgr().Wkr_query_img_size());
}
public void Thumb_dir_(Io_url v) {
thumb_dir = v;
diff --git a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Orig_fil_tbl.java b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Orig_fil_tbl.java
index b429587d8..4febd79c5 100644
--- a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Orig_fil_tbl.java
+++ b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Orig_fil_tbl.java
@@ -17,7 +17,7 @@ along with this program. If not, see .
*/
package gplx.xowa.files.fsdb.fs_roots; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*;
import gplx.dbs.*;
-public class Orig_fil_tbl {
+public class Orig_fil_tbl implements RlsAble {
private String tbl_name = "orig_fil"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
private String fld_uid, fld_name, fld_ext_id, fld_w, fld_h, fld_dir_url;
private Db_conn conn; private Db_stmt stmt_insert, stmt_select;
@@ -37,16 +37,20 @@ public class Orig_fil_tbl {
Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
, Db_meta_idx.new_unique_by_tbl(tbl_name, "main", fld_name)
);
- conn.Exec_create_tbl_and_idx(meta);
+ conn.Ddl_create_tbl(meta);
}
stmt_insert = stmt_select = null;
+ conn.Rls_reg(this);
+ }
+ public void Rls() {
+ stmt_insert = Db_stmt_.Rls(stmt_insert);
+ stmt_select = Db_stmt_.Rls(stmt_select);
}
public Orig_fil_itm Select_itm(byte[] ttl) {
- if (stmt_select == null) stmt_select = conn.Rls_reg(conn.Stmt_select(tbl_name, flds, fld_name));
+ if (stmt_select == null) stmt_select = conn.Stmt_select(tbl_name, flds, fld_name);
Orig_fil_itm rv = Orig_fil_itm.Null;
- Db_rdr rdr = Db_rdr_.Null;
+ Db_rdr rdr = stmt_select.Clear().Crt_bry_as_str(fld_name, ttl).Exec_select__rls_manual();
try {
- rdr = stmt_select.Clear().Crt_bry_as_str(fld_name, ttl).Exec_select_as_rdr();
if (rdr.Move_next())
rv = Load_itm(rdr);
return rv;
@@ -64,7 +68,7 @@ public class Orig_fil_tbl {
);
}
public void Insert(Orig_fil_itm fil_itm) {
- if (stmt_insert == null) stmt_insert = conn.Rls_reg(conn.Stmt_insert(tbl_name, flds));
+ if (stmt_insert == null) stmt_insert = conn.Stmt_insert(tbl_name, flds);
stmt_insert.Clear()
.Val_int(fld_uid, fil_itm.Fil_uid())
.Val_bry_as_str(fld_name, fil_itm.Fil_name())
@@ -74,5 +78,4 @@ public class Orig_fil_tbl {
.Val_bry_as_str(fld_dir_url, fil_itm.Fil_dir_url())
.Exec_insert();
}
- public void Rls() {}
}
diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_fxt.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_fxt.java
index ac0b711c1..deca956ae 100644
--- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_fxt.java
+++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_fxt.java
@@ -16,26 +16,31 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.files.fsdb.tsts; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*;
-import gplx.fsdb.*; import gplx.dbs.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.cnvs.*; import gplx.xowa.files.exts.*; import gplx.xowa.files.gui.*;
-import gplx.xowa.wikis.*; import gplx.xowa.files.repos.*;
+import gplx.fsdb.*; import gplx.fsdb.meta.*; import gplx.dbs.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.cnvs.*; import gplx.xowa.files.exts.*; import gplx.xowa.files.gui.*;
+import gplx.xowa.wikis.*; import gplx.xowa.files.repos.*; import gplx.xowa.wikis.data.*;
import gplx.fsdb.data.*;
class Xof_file_fxt {
- private Xoae_app app; private Xof_fsdb_mgr fsdb_mgr; private Xowe_wiki wiki;
+ private Xoae_app app; private Xof_fsdb_mgr__sql fsdb_mgr; private Xowe_wiki wiki; private Xof_orig_mgr orig_mgr;
private final Fsd_thm_itm tmp_thm = Fsd_thm_itm.new_(); private final Fsd_img_itm tmp_img = new Fsd_img_itm();
- public void Rls() {fsdb_mgr.Rls();}
+ public void Rls() {}
public void Reset() {
Io_mgr._.InitEngine_mem(); // NOTE: files are downloaded to mem_engine, regardless of Db being mem or sqlite; always reset
- Io_url fsys_db = Xoa_test_.Url_file_enwiki();
- Xoa_test_.Db_init(fsys_db);
- app = Xoa_app_fxt.app_(Op_sys.Cur().Os_name(), fsys_db);
+ Io_url root_url = Xoa_test_.Url_root();
+ Xoa_test_.Db_init(root_url);
+ app = Xoa_app_fxt.app_(Op_sys.Cur().Os_name(), root_url);
wiki = Xoa_app_fxt.wiki_tst_(app);
wiki.File_mgr__fsdb_mode().Tid_make_y_();
+ this.fsdb_mgr = (Xof_fsdb_mgr__sql)wiki.File_mgr().Fsdb_mgr();
+ this.orig_mgr = wiki.File_mgr__orig_mgr();
Xof_repo_fxt.Repos_init(app.File_mgr(), true, wiki);
- wiki.Db_mgr_create_as_sql(); // NOTE: must create as sql_db_mgr not txt_db_mgr
- fsdb_mgr = new Xof_fsdb_mgr__sql(); // NOTE: must new Xof_fsdb_mgr__sql b/c it keeps a local init;
- fsdb_mgr.Init_by_wiki(wiki);
- fsdb_mgr.Bin_mgr().Wkrs__clear();
- Xof_bin_wkr__fsdb_sql bin_wkr_fsdb = (Xof_bin_wkr__fsdb_sql)fsdb_mgr.Bin_mgr().Wkrs__get_or_new(Xof_bin_wkr_.Key_fsdb_wiki);
+ Xowe_wiki_bldr.Create(wiki, 1, "dump.xml");
+ Xowd_db_file text_db = wiki.Data_mgr__core_mgr().Dbs__make_by_tid(Xowd_db_file_.Tid_text); text_db.Tbl__text().Create_tbl();
+ Fsdb_db_mgr__v2 fsdb_core = Fsdb_db_mgr__v2_bldr.I.Make(wiki);
+ fsdb_mgr.Mnt_mgr().Ctor_by_load(fsdb_core);
+ fsdb_mgr.Mnt_mgr().Mnts__get_main().Bin_mgr().Dbs__make("temp.xowa");
+ wiki.File_mgr().Init_file_mgr_by_load(wiki);
+ fsdb_mgr.Bin_mgr().Wkrs__del(Xof_bin_wkr_.Key_http_wmf); // never use http_wmf wkr for these tests
+ Xof_bin_wkr__fsdb_sql bin_wkr_fsdb = (Xof_bin_wkr__fsdb_sql)fsdb_mgr.Bin_mgr().Wkrs__get_or_null(Xof_bin_wkr_.Key_fsdb_wiki);
fsdb_mgr.Bin_mgr().Resizer_(Xof_img_wkr_resize_img_mok._);
bin_wkr_fsdb.Resize_allowed_(true);
}
@@ -44,20 +49,23 @@ class Xof_file_fxt {
this.Init_orig_db(Xof_orig_arg.new_comm(ttl, w, h));
}
public void Init_orig_db(Xof_orig_arg arg) {
- fsdb_mgr.Orig_mgr().Insert(arg.Repo(), arg.Page(), Xof_ext_.new_by_ttl_(arg.Page()).Id(), arg.W(), arg.H(), arg.Redirect());
+ orig_mgr.Insert(arg.Repo(), arg.Page(), Xof_ext_.new_by_ttl_(arg.Page()).Id(), arg.W(), arg.H(), arg.Redirect());
}
public void Init_fsdb_db(Xof_fsdb_arg arg) {
+ Fsm_mnt_itm mnt_itm = fsdb_mgr.Mnt_mgr().Mnts__get_main();
+ Fsm_atr_fil atr_fil = mnt_itm.Atr_mgr().Db__core();
+ Fsm_bin_fil bin_fil = mnt_itm.Bin_mgr().Dbs__get_nth();
if (arg.Is_thumb())
- fsdb_mgr.Mnt_mgr().Thm_insert(tmp_thm, arg.Wiki(), arg.Ttl(), arg.Ext(), arg.W(), arg.H(), arg.Time(), arg.Page(), arg.Modified(), arg.Hash(), arg.Bin().length, gplx.ios.Io_stream_rdr_.mem_(arg.Bin()));
+ mnt_itm.Insert_thm(tmp_thm, atr_fil, bin_fil, arg.Wiki(), arg.Ttl(), arg.Ext(), arg.W(), arg.H(), arg.Time(), arg.Page(), arg.Bin().length, gplx.ios.Io_stream_rdr_.mem_(arg.Bin()));
else
- fsdb_mgr.Mnt_mgr().Img_insert(tmp_img, arg.Wiki(), arg.Ttl(), arg.Ext(), arg.W(), arg.H(), arg.Modified(), arg.Hash(), arg.Bin().length, gplx.ios.Io_stream_rdr_.mem_(arg.Bin()));
+ mnt_itm.Insert_img(tmp_img, atr_fil, bin_fil, arg.Wiki(), arg.Ttl(), arg.Ext(), arg.W(), arg.H(), arg.Bin().length, gplx.ios.Io_stream_rdr_.mem_(arg.Bin()));
}
public void Exec_get(Xof_exec_arg arg) {
byte[] ttl_bry = arg.Ttl();
Xof_fsdb_itm itm = new Xof_fsdb_itm();
itm.Ctor_by_lnki(ttl_bry, arg.Lnki_type(), arg.Lnki_w(), arg.Lnki_h(), Xof_patch_upright_tid_.Tid_all, arg.Lnki_upright(), arg.Lnki_time(), Xof_lnki_page.Null);
ListAdp itms_list = ListAdp_.new_(); itms_list.Add(itm);
- fsdb_mgr.Orig_mgr().Find_by_list(OrderedHash_.new_bry_(), itms_list, Xof_exec_tid.Tid_wiki_page);
+ orig_mgr.Find_by_list(OrderedHash_.new_bry_(), itms_list, Xof_exec_tid.Tid_wiki_page);
Xoa_ttl ttl = Xoa_ttl.parse_(wiki, Xow_ns_.Id_main, ttl_bry);
Xoae_page page = Xoae_page.new_(wiki, ttl);
fsdb_mgr.Fsdb_search_by_list(arg.Exec_tid(), itms_list, page, Xog_js_wkr_.Null);
diff --git a/400_xowa/src/gplx/xowa/files/gui/Xog_js_wkr.java b/400_xowa/src/gplx/xowa/files/gui/Xog_js_wkr.java
index 61b0a3588..bc9ef6881 100644
--- a/400_xowa/src/gplx/xowa/files/gui/Xog_js_wkr.java
+++ b/400_xowa/src/gplx/xowa/files/gui/Xog_js_wkr.java
@@ -18,6 +18,8 @@ along with this program. If not, see .
package gplx.xowa.files.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
public interface Xog_js_wkr {
void Html_img_update (String uid, String src, int w, int h);
+ void Html_redlink (String html_uid);
+
void Html_atr_set (String uid, String key, String val);
void Html_elem_replace_html (String uid, String html);
}
diff --git a/400_xowa/src/gplx/xowa/files/gui/Xog_js_wkr_.java b/400_xowa/src/gplx/xowa/files/gui/Xog_js_wkr_.java
index ab056508f..8cc9a467c 100644
--- a/400_xowa/src/gplx/xowa/files/gui/Xog_js_wkr_.java
+++ b/400_xowa/src/gplx/xowa/files/gui/Xog_js_wkr_.java
@@ -23,4 +23,5 @@ class Xog_js_wkr__null implements Xog_js_wkr {
public void Html_img_update (String uid, String src, int w, int h) {}
public void Html_atr_set (String uid, String key, String val) {}
public void Html_elem_replace_html (String uid, String html) {}
+ public void Html_redlink (String html_uid) {}
}
diff --git a/400_xowa/src/gplx/xowa/files/origs/Xob_orig_tbl_bldr.java b/400_xowa/src/gplx/xowa/files/origs/Xob_orig_tbl_bldr.java
index 78d8e4580..0ef52b93f 100644
--- a/400_xowa/src/gplx/xowa/files/origs/Xob_orig_tbl_bldr.java
+++ b/400_xowa/src/gplx/xowa/files/origs/Xob_orig_tbl_bldr.java
@@ -16,35 +16,36 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.files.origs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
-import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.bldrs.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.files.origs.*; import gplx.xowa.bldrs.oimgs.*;
+import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.bldrs.*; import gplx.fsdb.*;
public class Xob_orig_tbl_bldr extends Xob_itm_basic_base implements Xob_cmd {
private Db_conn conn;
public Xob_orig_tbl_bldr(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
- public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.wiki_orig";
- public void Cmd_ini(Xob_bldr bldr) {}
+ public String Cmd_key() {return Xob_cmd_keys.Key_file_orig_reg;}
+ public void Cmd_init(Xob_bldr bldr) {}
public void Cmd_bgn(Xob_bldr bldr) {
Xof_fsdb_mode fsdb_mode = wiki.File_mgr__fsdb_mode();
fsdb_mode.Tid_make_y_();
wiki.Init_assert();
- conn = Xof_orig_tbl.Conn__get_or_make(wiki.Fsys_mgr().File_dir(), new Xof_orig_tbl(), Bool_.Y, fsdb_mode); // NOTE: Xof_orig_tbl needed if db doesn't exist and tbl.meta needs to be created
- Io_url make_db_url = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Url();
+ Fsdb_db_mgr db_core_mgr = Fsdb_db_mgr_.new_detect(wiki.Domain_str(), wiki.Fsys_mgr().Root_dir(), wiki.Fsys_mgr().File_dir());
+ conn = db_core_mgr.File__orig_tbl_ary()[gplx.fsdb.meta.Fsm_mnt_mgr.Mnt_idx_main].Conn();
+ Io_url make_db_url = Xob_db_file.new__file_make(wiki.Fsys_mgr().Root_dir()).Url();
Sqlite_engine_.Db_attach(conn, "make_db", make_db_url.Raw());
}
public void Cmd_run() {Exec();}
public void Cmd_end() {}
- public void Cmd_print() {}
+ public void Cmd_term() {}
private void Exec() {
- usr_dlg.Prog_many("", "", "deleting wiki_orig"); conn.Exec_sql(Sql_delete_wiki_orig); // always delete wiki_orig, else will not pick up changed sizes / moved repos; DATE:2014-07-21
- usr_dlg.Prog_many("", "", "inserting xfer direct"); conn.Exec_sql(Sql_create_xfer_direct);
- usr_dlg.Prog_many("", "", "inserting xfer redirect"); conn.Exec_sql(Sql_create_xfer_redirect);
- usr_dlg.Prog_many("", "", "inserting orig direct"); conn.Exec_sql(Sql_create_orig_direct);
- usr_dlg.Prog_many("", "", "inserting orig redirect"); conn.Exec_sql(Sql_create_orig_redirect);
+ conn.Exec_sql_plog_txn("orig_wkr.deleting orig_reg" , Sql_delete_wiki_orig); // always delete orig_reg, else will not pick up changed sizes / moved repos; DATE:2014-07-21
+ conn.Exec_sql_plog_txn("orig_wkr.inserting xfer direct" , Sql_create_xfer_direct);
+ conn.Exec_sql_plog_txn("orig_wkr.inserting xfer redirect" , Sql_create_xfer_redirect);
+ conn.Exec_sql_plog_txn("orig_wkr.inserting orig direct" , Sql_create_orig_direct);
+ conn.Exec_sql_plog_txn("orig_wkr.inserting orig redirect" , Sql_create_orig_redirect);
}
- private static final String
- Sql_delete_wiki_orig = "DELETE FROM wiki_orig;"
+ public static final String
+ Sql_delete_wiki_orig = "DELETE FROM orig_reg;"
, Sql_create_xfer_direct = String_.Concat_lines_nl
- ( "INSERT INTO wiki_orig "
- , "(orig_ttl, status, orig_repo, orig_ext, orig_w, orig_h, orig_redirect)"
+ ( "INSERT INTO orig_reg "
+ , "(orig_ttl, orig_status, orig_repo, orig_ext, orig_w, orig_h, orig_redirect)"
, "SELECT DISTINCT"
, " xfer.lnki_ttl"
, ", 1 --pass"
@@ -54,12 +55,12 @@ public class Xob_orig_tbl_bldr extends Xob_itm_basic_base implements Xob_cmd {
, ", xfer.orig_h"
, ", ''"
, "FROM make_db.xfer_regy xfer"
- , " LEFT JOIN wiki_orig cur ON xfer.lnki_ttl = cur.orig_ttl"
+ , " LEFT JOIN orig_reg cur ON xfer.lnki_ttl = cur.orig_ttl"
, "WHERE cur.orig_ttl IS NULL"
)
, Sql_create_xfer_redirect = String_.Concat_lines_nl
- ( "INSERT INTO wiki_orig "
- , "(orig_ttl, status, orig_repo, orig_ext, orig_w, orig_h, orig_redirect)"
+ ( "INSERT INTO orig_reg "
+ , "(orig_ttl, orig_status, orig_repo, orig_ext, orig_w, orig_h, orig_redirect)"
, "SELECT DISTINCT"
, " xfer.orig_redirect_src"
, ", 1 --pass"
@@ -69,13 +70,13 @@ public class Xob_orig_tbl_bldr extends Xob_itm_basic_base implements Xob_cmd {
, ", xfer.orig_h"
, ", xfer.lnki_ttl"
, "FROM make_db.xfer_regy xfer"
- , " LEFT JOIN wiki_orig cur ON xfer.orig_redirect_src = cur.orig_ttl"
+ , " LEFT JOIN orig_reg cur ON xfer.orig_redirect_src = cur.orig_ttl"
, "WHERE cur.orig_ttl IS NULL"
, "AND Coalesce(xfer.orig_redirect_src, '') != ''"
)
, Sql_create_orig_direct = String_.Concat_lines_nl
- ( "INSERT INTO wiki_orig "
- , "(orig_ttl, status, orig_repo, orig_ext, orig_w, orig_h, orig_redirect)"
+ ( "INSERT INTO orig_reg "
+ , "(orig_ttl, orig_status, orig_repo, orig_ext, orig_w, orig_h, orig_redirect)"
, "SELECT DISTINCT"
, " orig.lnki_ttl"
, ", 0 --unknown"
@@ -85,15 +86,15 @@ public class Xob_orig_tbl_bldr extends Xob_itm_basic_base implements Xob_cmd {
, ", orig.orig_h"
, ", ''"
, "FROM make_db.orig_regy orig"
- , " LEFT JOIN wiki_orig cur ON orig.lnki_ttl = cur.orig_ttl"
- , "WHERE cur.orig_ttl IS NULL" // not already in wiki_orig
+ , " LEFT JOIN orig_reg cur ON orig.lnki_ttl = cur.orig_ttl"
+ , "WHERE cur.orig_ttl IS NULL" // not already in orig_reg
, "AND orig.orig_repo IS NOT NULL" // not found in oimg_image.sqlite3
, "AND Coalesce(orig.orig_w , -1) != -1" // ignore entries that are either ext_id = 0 ("File:1") or don't have any width / height info (makes it useless); need to try to get again from wmf_api
, "AND Coalesce(orig.orig_redirect_ttl, '') == ''" // direct
)
, Sql_create_orig_redirect = String_.Concat_lines_nl
- ( "INSERT INTO wiki_orig "
- , "(orig_ttl, status, orig_repo, orig_ext, orig_w, orig_h, orig_redirect)"
+ ( "INSERT INTO orig_reg "
+ , "(orig_ttl, orig_status, orig_repo, orig_ext, orig_w, orig_h, orig_redirect)"
, "SELECT DISTINCT"
, " orig.orig_redirect_ttl"
, ", 0 --unknown"
@@ -103,8 +104,8 @@ public class Xob_orig_tbl_bldr extends Xob_itm_basic_base implements Xob_cmd {
, ", orig.orig_h"
, ", ''"
, "FROM make_db.orig_regy orig"
- , " LEFT JOIN wiki_orig cur ON orig.orig_redirect_ttl = cur.orig_ttl"
- , "WHERE cur.orig_ttl IS NULL" // not already in wiki_orig
+ , " LEFT JOIN orig_reg cur ON orig.orig_redirect_ttl = cur.orig_ttl"
+ , "WHERE cur.orig_ttl IS NULL" // not already in orig_reg
, "AND orig.orig_repo IS NOT NULL" // not found in oimg_image.sqlite3
, "AND Coalesce(orig.orig_w, -1) != -1" // ignore entries that are either ext_id = 0 ("File:1") or don't have any width / height info (makes it useless); need to try to get again from wmf_api
, "AND Coalesce(orig.orig_redirect_ttl, '') != ''" // redirect
diff --git a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_mgr.java b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_mgr.java
index 27c653db5..74618a951 100644
--- a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_mgr.java
+++ b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_mgr.java
@@ -16,20 +16,20 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.files.origs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
-import gplx.core.primitives.*;
-import gplx.dbs.*;
+import gplx.core.primitives.*; import gplx.dbs.*;
import gplx.xowa.files.repos.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.wmfs.apis.*;
public class Xof_orig_mgr {
- private Xof_orig_wkr[] wkrs; private int wkrs_len;
- private Xof_url_bldr url_bldr; private Xow_repo_mgr repo_mgr;
- private final Xof_img_size img_size = new Xof_img_size();
+ private Xof_orig_wkr[] wkrs; private int wkrs_len;
+ private Xof_url_bldr url_bldr; private Xow_repo_mgr repo_mgr; private final Xof_img_size img_size = new Xof_img_size();
public Xof_orig_mgr() {this.Wkrs__clear();}
- public void Init_by_wiki(Io_url db_dir, boolean schema_is_1, byte[] domain_bry, Xof_download_wkr download_wkr, Xow_repo_mgr repo_mgr, Xof_url_bldr url_bldr, Xof_fsdb_mode fsdb_mode) {
+ public void Init_by_wiki(Xof_fsdb_mode fsdb_mode, Xof_orig_tbl[] orig_tbls, byte[] domain_bry, Xof_download_wkr download_wkr, Xow_repo_mgr repo_mgr, Xof_url_bldr url_bldr) {
this.repo_mgr = repo_mgr; this.url_bldr = url_bldr;
if (!fsdb_mode.Tid_wmf()) { // add view,make; don't add if wmf
- Xof_orig_wkr__orig_db wkr_xowa_db = new Xof_orig_wkr__orig_db();
- Xof_orig_tbl.Conn__get_or_make(db_dir, wkr_xowa_db.Tbl(), schema_is_1, fsdb_mode);
- this.Wkrs__add_many(wkr_xowa_db);
+ int orig_tbls_len = orig_tbls.length;
+ for (int i = 0; i < orig_tbls_len; ++i) {
+ Xof_orig_tbl orig_tbl = orig_tbls[i];
+ this.Wkrs__add_many(new Xof_orig_wkr__orig_db(orig_tbl, i == orig_tbls_len - 1));
+ }
}
if (!fsdb_mode.Tid_make()) // add view,wmf; don't add if make
this.Wkrs__add_many(new Xof_orig_wkr__wmf_api(new Xoapi_orig_wmf(), download_wkr, repo_mgr, domain_bry));
@@ -61,7 +61,7 @@ public class Xof_orig_mgr {
if (!Io_mgr._.ExistsFil(fsdb.Html_view_url()))
fsdb.File_exists_n_();
} catch (Exception e) {
- throw Err_.err_(e, "orig: {0}", Err_.Message_gplx_brief(e));
+ Xoa_app_.Usr_dlg().Warn_many("", "", "orig: ~{0}", Err_.Message_gplx_brief(e));
}
}
}
@@ -71,21 +71,19 @@ public class Xof_orig_mgr {
if (wkr.Add_orig(repo, page, ext, w, h, redirect)) break;
}
}
- public void Txn_save() {
- for (int i = 0; i < wkrs_len; i++) {
- Xof_orig_wkr wkr = wkrs[i];
- wkr.Db_txn_save();
- }
- }
- public void Rls() {
- for (int i = 0; i < wkrs_len; i++) {
- Xof_orig_wkr wkr = wkrs[i];
- wkr.Db_rls();
- }
- }
private void Wkrs__clear() {wkrs = Xof_orig_wkr_.Ary_empty; wkrs_len = 0;}
private void Wkrs__add_many(Xof_orig_wkr... v) {
wkrs = (Xof_orig_wkr[])Array_.Resize_add(wkrs, v);
wkrs_len += v.length;
}
+ public void Wkrs_del(byte tid) {
+ ListAdp list = ListAdp_.new_();
+ for (int i = 0; i < wkrs_len; ++i) {
+ Xof_orig_wkr wkr = wkrs[i];
+ if (wkr.Tid() == tid) continue; // do not add deleted wkr
+ list.Add(wkr);
+ }
+ wkrs = (Xof_orig_wkr[])list.Xto_ary_and_clear(Xof_orig_wkr.class);
+ wkrs_len = wkrs.length;
+ }
}
diff --git a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl.java b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl.java
index aebdab1f6..7a7890f92 100644
--- a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl.java
+++ b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl.java
@@ -19,40 +19,33 @@ package gplx.xowa.files.origs; import gplx.*; import gplx.xowa.*; import gplx.xo
import gplx.core.primitives.*;
import gplx.dbs.*; import gplx.dbs.utls.*;
import gplx.xowa.files.fsdb.*; import gplx.xowa.files.repos.*;
-public class Xof_orig_tbl {
- private String tbl_name = "file_orig_regy"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
- private String fld_repo, fld_ttl, fld_status, fld_ext, fld_w, fld_h, fld_redirect;
- private Db_conn conn; private final Xof_orig_tbl__in_wkr select_in_wkr = new Xof_orig_tbl__in_wkr();
+public class Xof_orig_tbl implements RlsAble {
+ private final String tbl_name; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
+ private final String fld_repo, fld_ttl, fld_status, fld_ext, fld_w, fld_h, fld_redirect;
+ private final Db_conn conn; private final Xof_orig_tbl__in_wkr select_in_wkr = new Xof_orig_tbl__in_wkr();
public Db_conn Conn() {return conn;}
- public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) {
- this.conn = new_conn; flds.Clear();
- String fld_prefix = "";
- if (schema_is_1) {
- tbl_name = "wiki_orig";
- fld_prefix = "orig_";
- }
- fld_repo = flds.Add_byte(fld_prefix + "repo");
- fld_ttl = flds.Add_str(fld_prefix + "ttl", 1024);
- fld_status = flds.Add_byte("status"); // NOTE: "status" in v1 and v2
- fld_ext = flds.Add_int(fld_prefix + "ext");
- fld_w = flds.Add_int(fld_prefix + "w");
- fld_h = flds.Add_int(fld_prefix + "h");
- fld_redirect = flds.Add_str(fld_prefix + "redirect", 1024);
- if (created) {
- Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
- , Db_meta_idx.new_unique_by_tbl(tbl_name, "key", fld_ttl)
- );
- conn.Exec_create_tbl_and_idx(meta);
- }
+ public Xof_orig_tbl(Db_conn conn, boolean schema_is_1) {
+ this.conn = conn;
+ String fld_status_name = "orig_status";
+ if (schema_is_1) {tbl_name = "wiki_orig"; fld_status_name = "status";}
+ else {tbl_name = "orig_reg";}
+ fld_ttl = flds.Add_str("orig_ttl", 1024);
+ fld_repo = flds.Add_byte("orig_repo");
+ fld_status = flds.Add_byte(fld_status_name);
+ fld_ext = flds.Add_int("orig_ext");
+ fld_w = flds.Add_int("orig_w");
+ fld_h = flds.Add_int("orig_h");
+ fld_redirect = flds.Add_str("orig_redirect", 1024);
select_in_wkr.Ctor(this, tbl_name, flds, fld_ttl);
+ conn.Rls_reg(this);
}
- public void Select_by_list(OrderedHash rv, ListAdp itms) {select_in_wkr.Init(rv, itms).Select_in(Cancelable_.Never, gplx.xowa.dbs.Xodb_ctx.Null, conn, 0, itms.Count());}
+ public void Rls() {}
+ public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_normal_by_tbl(tbl_name, "main", fld_ttl)));}
+ public void Select_by_list(OrderedHash rv, ListAdp itms) {select_in_wkr.Init(rv, itms).Select_in(Cancelable_.Never, conn, 0, itms.Count());}
public Xof_orig_itm Select_itm(byte[] ttl) {
Xof_orig_itm rv = Xof_orig_itm.Null;
- Db_rdr rdr = Db_rdr_.Null;
+ Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld_ttl).Clear().Crt_bry_as_str(fld_ttl, ttl).Exec_select__rls_auto();
try {
- Db_stmt stmt = conn.Stmt_select(tbl_name, flds, fld_ttl);
- rdr = stmt.Clear().Crt_bry_as_str(fld_ttl, ttl).Exec_select_as_rdr();
if (rdr.Move_next())
rv = Make_itm(rdr);
}
@@ -60,17 +53,14 @@ public class Xof_orig_tbl {
return rv;
}
public boolean Exists__repo_ttl(byte repo, byte[] ttl) {
- Db_rdr rdr = Db_rdr_.Null;
- try {
- rdr = conn.Stmt_select(tbl_name, flds, fld_repo, fld_ttl).Crt_byte(fld_repo, repo).Crt_bry_as_str(fld_ttl, ttl).Exec_select_as_rdr();
- return rdr.Move_next();
- }
+ Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld_repo, fld_ttl).Crt_byte(fld_repo, repo).Crt_bry_as_str(fld_ttl, ttl).Exec_select__rls_auto();
+ try {return rdr.Move_next();}
finally {rdr.Rls();}
}
public void Insert(byte repo, byte[] ttl, int ext, int w, int h, byte[] redirect) {
Db_stmt stmt = conn.Stmt_insert(tbl_name, flds);
stmt.Clear()
- .Val_byte(fld_repo, repo).Val_bry_as_str(fld_ttl, ttl).Val_byte(fld_status, Status_found)
+ .Val_bry_as_str(fld_ttl, ttl).Val_byte(fld_repo, repo).Val_byte(fld_status, Status_found)
.Val_int(fld_ext, ext).Val_int(fld_w, w).Val_int(fld_h, h).Val_bry_as_str(fld_redirect, redirect)
.Exec_insert();
}
@@ -94,22 +84,6 @@ public class Xof_orig_tbl {
);
return rv.W() == Xof_img_size.Null ? Xof_orig_itm.Null : rv;
}
- public static final String Db_conn_bldr_type = "xowa.file.orig_regy";
- public static Db_conn Conn__get_or_make(Io_url root_dir, Xof_orig_tbl tbl, boolean schema_is_1, Xof_fsdb_mode fsdb_mode) {
- Io_url conn_url = root_dir.GenSubFil("wiki.orig#00.sqlite3");
-// boolean created = Bool_.N; Db_conn conn = null;
-// if (fsdb_create.Val()) {
- Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new("", conn_url);
- Db_conn conn = conn_data.Conn();
- boolean created = conn_data.Created();
-// }
-// else {
-// conn = Db_conn_bldr.I.Get("", conn_url);
-// created = false;
-// }
- tbl.Conn_(conn, created, schema_is_1);
- return conn;
- }
private static final byte Status_found = 1;
}
class Xof_orig_tbl__in_wkr extends Db_in_wkr__base {
@@ -119,8 +93,7 @@ class Xof_orig_tbl__in_wkr extends Db_in_wkr__base {
this.tbl = tbl; this.tbl_name = tbl_name; this.flds = flds; this.fld_ttl = fld_ttl;
}
public Xof_orig_tbl__in_wkr Init(OrderedHash rv, ListAdp itms) {this.itms = itms; this.rv = rv; return this;}
- @Override protected int Interval() {return gplx.dbs.engines.sqlite.Sqlite_engine_.Stmt_arg_max;}
- @Override protected Db_qry Make_qry(Object db_ctx, int bgn, int end) {
+ @Override protected Db_qry Make_qry(int bgn, int end) {
Object[] part_ary = In_ary(end - bgn);
return Db_qry_.select_cols_(tbl_name, Db_crt_.in_(fld_ttl, part_ary), flds.To_str_ary());
}
@@ -130,7 +103,7 @@ class Xof_orig_tbl__in_wkr extends Db_in_wkr__base {
stmt.Crt_bry_as_str(fld_ttl, fsdb_itm.Lnki_ttl());
}
}
- @Override protected void Read_data(Cancelable cancelable, Object db_ctx, Db_rdr rdr) {
+ @Override protected void Read_data(Cancelable cancelable, Db_rdr rdr) {
while (rdr.Move_next()) {
if (cancelable.Canceled()) return;
Xof_orig_itm itm = tbl.Make_itm(rdr);
diff --git a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl_tst.java b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl_tst.java
index ccef3e041..e9095e84e 100644
--- a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl_tst.java
+++ b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl_tst.java
@@ -29,11 +29,12 @@ public class Xof_orig_tbl_tst {
}
}
class Xof_orig_tbl_fxt {
- private Xof_orig_tbl tbl = new Xof_orig_tbl();
+ private Xof_orig_tbl tbl;
public void Clear() {
- String test_url = "test/file/en.wikipedia.org/file/orig_regy";
- Db_conn conn = Db_conn_pool.I.Get_or_new__mem(test_url);
- tbl.Conn_(conn, Bool_.Y, Bool_.Y);
+ Io_url test_url = Io_url_.mem_fil_("mem/file/en.wikipedia.org/file/orig_regy");
+ Db_conn conn = Db_conn_bldr.I.New(test_url);
+ tbl = new Xof_orig_tbl(conn, Bool_.Y);
+ tbl.Create_tbl();
}
public Xof_orig_itm Exec_insert(String ttl, int w, int h) {
byte[] ttl_bry = Bry_.new_utf8_(ttl);
diff --git a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr__orig_db.java b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr__orig_db.java
index c1da9c033..7f52ccd12 100644
--- a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr__orig_db.java
+++ b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr__orig_db.java
@@ -18,18 +18,20 @@ along with this program. If not, see .
package gplx.xowa.files.origs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
import gplx.dbs.*;
public class Xof_orig_wkr__orig_db implements Xof_orig_wkr {
+ private final boolean addable;
+ public Xof_orig_wkr__orig_db(Xof_orig_tbl tbl, boolean addable) {this.tbl = tbl; this.addable = addable;}
public byte Tid() {return Xof_orig_wkr_.Tid_xowa_db;}
- public Xof_orig_tbl Tbl() {return tbl;} private final Xof_orig_tbl tbl = new Xof_orig_tbl();
- public void Conn_(Db_conn conn, boolean created, boolean schema_is_1) {tbl.Conn_(conn, created, schema_is_1);}
+ public Xof_orig_tbl Tbl() {return tbl;} private final Xof_orig_tbl tbl;
public void Find_by_list(OrderedHash rv, ListAdp itms) {tbl.Select_by_list(rv, itms);}
public Xof_orig_itm Find_as_itm(byte[] ttl) {return tbl.Select_itm(ttl);}
- public boolean Add_orig(byte repo, byte[] page, int ext_id, int w, int h, byte[] redirect) {
+ public boolean Add_orig(byte repo, byte[] page, int ext_id, int w, int h, byte[] redirect) {
+ if (!addable) return false;
if (tbl.Exists__repo_ttl(repo, page))
tbl.Update(repo, page, ext_id, w, h, redirect);
else
tbl.Insert(repo, page, ext_id, w, h, redirect);
return true;
}
- public void Db_txn_save() {tbl.Conn().Txn_mgr().Txn_end_all();}
- public void Db_rls() {tbl.Conn().Conn_term();}
+ public void Db_txn_save() {tbl.Conn().Txn_end();}
+ public void Db_rls() {tbl.Conn().Rls_conn();}
}
diff --git a/400_xowa/src/gplx/xowa/files/origs/Xof_wiki_finder.java b/400_xowa/src/gplx/xowa/files/origs/Xof_wiki_finder.java
index 3d3fe635e..35764d665 100644
--- a/400_xowa/src/gplx/xowa/files/origs/Xof_wiki_finder.java
+++ b/400_xowa/src/gplx/xowa/files/origs/Xof_wiki_finder.java
@@ -16,9 +16,10 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.files.origs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
+import gplx.xowa.wikis.data.tbls.*;
class Xof_wiki_finder { // UNUSED
private Xowe_wiki wiki_0, wiki_1;
- private Xodb_page db_page = new Xodb_page();
+ private Xowd_page_itm db_page = new Xowd_page_itm();
public Xof_wiki_finder(Xowe_wiki wiki_0, Xowe_wiki wiki_1) {
this.wiki_0 = wiki_0; this.wiki_1 = wiki_1;
}
@@ -61,7 +62,7 @@ class Xof_wiki_finder { // UNUSED
}
return true;
}
- private boolean Find_page__by_wiki(Xodb_page db_page, Xowe_wiki wiki, int ns_id, byte[] ttl_bry) {
+ private boolean Find_page__by_wiki(Xowd_page_itm db_page, Xowe_wiki wiki, int ns_id, byte[] ttl_bry) {
Xow_ns ns = wiki.Ns_mgr().Ids_get_or_null(ns_id);
wiki.Db_mgr().Load_mgr().Load_page(db_page, ns, false);
return db_page.Exists();
diff --git a/400_xowa/src/gplx/xowa/gui/menus/Xog_menu_mgr.java b/400_xowa/src/gplx/xowa/gui/menus/Xog_menu_mgr.java
index e15474de3..e776e9516 100644
--- a/400_xowa/src/gplx/xowa/gui/menus/Xog_menu_mgr.java
+++ b/400_xowa/src/gplx/xowa/gui/menus/Xog_menu_mgr.java
@@ -35,6 +35,7 @@ public class Xog_menu_mgr implements GfoInvkAble {
}
public void Init_by_kit() {
try {
+ if (Xoa_app_.Mode == Xoa_app_.Mode_http) return; // NOTE: do not try to initialize menu if http_server; will fail in headless mode when it tries to load SWT images; DATE:2015-03-27
popup_mnu_mgr.Init_by_kit();
window_mnu_mgr.Init_by_kit();
Lang_changed(app.User().Lang());
diff --git a/400_xowa/src/gplx/xowa/gui/menus/Xog_menu_mnu_src.java b/400_xowa/src/gplx/xowa/gui/menus/Xog_menu_mnu_src.java
index f98b9bf45..cd0059a90 100644
--- a/400_xowa/src/gplx/xowa/gui/menus/Xog_menu_mnu_src.java
+++ b/400_xowa/src/gplx/xowa/gui/menus/Xog_menu_mnu_src.java
@@ -243,5 +243,5 @@ class Xog_menu_bldr {
, Const_itm_grp_bgn_rhs = Bry_.new_ascii_("') {\n")
, Const_itm_grp_end = Bry_.new_ascii_("}\n")
;
- public static final Xog_menu_bldr _ = new Xog_menu_bldr(); Xog_menu_bldr() {}
+ public static final Xog_menu_bldr _ = new Xog_menu_bldr(); Xog_menu_bldr() {}
}
diff --git a/400_xowa/src/gplx/xowa/gui/urls/Xog_url_wkr.java b/400_xowa/src/gplx/xowa/gui/urls/Xog_url_wkr.java
index ccad2a6f2..c19fabdc3 100644
--- a/400_xowa/src/gplx/xowa/gui/urls/Xog_url_wkr.java
+++ b/400_xowa/src/gplx/xowa/gui/urls/Xog_url_wkr.java
@@ -119,7 +119,7 @@ public class Xog_url_wkr {
tmp_bfr.Add_byte(Byte_ascii.Slash);
}
tmp_bfr.Add(page_bry);
- page_bry = tmp_bfr.Mkr_rls().Xto_bry_and_clear();
+ page_bry = tmp_bfr.To_bry_and_rls();
}
rv.Segs_ary_(Bry_.Ary_empty);
}
diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_html_itm.java b/400_xowa/src/gplx/xowa/gui/views/Xog_html_itm.java
index 5d814e843..1d8f12074 100644
--- a/400_xowa/src/gplx/xowa/gui/views/Xog_html_itm.java
+++ b/400_xowa/src/gplx/xowa/gui/views/Xog_html_itm.java
@@ -103,6 +103,7 @@ public class Xog_html_itm implements Xog_js_wkr, GfoInvkAble, GfoEvObj {
GfoMsg m = GfoMsg_.new_cast_(Invk_html_elem_atr_set).Add("elem_id", elem_id).Add("atr_key", atr_key).Add("atr_val", atr_val);
GfoInvkAble_.InvkCmd_msg(cmd_sync, Invk_html_elem_atr_set, m);
}
+ public void Html_redlink(String html_uid) {Html_elem_atr_set_append(html_uid, "class", "new");}
public void Html_elem_atr_set_append(String elem_id, String atr_key, String atr_val) {
GfoMsg m = GfoMsg_.new_cast_(Invk_html_elem_atr_set_append).Add("elem_id", elem_id).Add("atr_key", atr_key).Add("atr_val", atr_val);
GfoInvkAble_.InvkCmd_msg(cmd_sync, Invk_html_elem_atr_set_append, m);
diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk.java b/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk.java
index 47a2be322..93e684a80 100644
--- a/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk.java
+++ b/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk.java
@@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.gui.views; import gplx.*; import gplx.xowa.*; import gplx.xowa.gui.*;
-import gplx.threads.*; import gplx.xowa.xtns.pfuncs.ifs.*;
+import gplx.threads.*; import gplx.xowa.xtns.pfuncs.ifs.*; import gplx.xowa.wikis.data.tbls.*;
public class Xog_html_js_cbk implements GfoInvkAble {
private Xoae_app app;
private Xog_html_itm html_itm;
@@ -86,8 +86,8 @@ public class Xog_html_js_cbk implements GfoInvkAble {
Xoa_ttl ttl = Xoa_ttl.parse_(wiki, ttl_bry);
wiki.Db_mgr().Load_mgr().Load_by_ttl(tmp_page, ttl.Ns(), ttl.Page_db());
}
- return String_.Ary(tmp_page.Exists() ? "1" : "0", Int_.Xto_str(tmp_page.Id()), Int_.Xto_str(tmp_page.Ns_id()), String_.new_utf8_(tmp_page.Ttl_page_db()), Bool_.Xto_str_lower(tmp_page.Redirected()), tmp_page.Modified_on().XtoStr_fmt("yyyy-MM-dd HH:mm:ss"), Int_.Xto_str(tmp_page.Wtxt_len()));
- } private static final Xodb_page tmp_page = Xodb_page.new_tmp();
+ return String_.Ary(tmp_page.Exists() ? "1" : "0", Int_.Xto_str(tmp_page.Id()), Int_.Xto_str(tmp_page.Ns_id()), String_.new_utf8_(tmp_page.Ttl_page_db()), Bool_.Xto_str_lower(tmp_page.Redirected()), tmp_page.Modified_on().XtoStr_fmt("yyyy-MM-dd HH:mm:ss"), Int_.Xto_str(tmp_page.Text_len()));
+ } private static final Xowd_page_itm tmp_page = Xowd_page_itm.new_tmp();
private String[][] Get_titles_meta(GfoMsg m) {
Xowe_wiki wiki = html_itm.Owner_tab().Wiki();
try {
diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_launcher_tabs.java b/400_xowa/src/gplx/xowa/gui/views/Xog_launcher_tabs.java
index 483e1122b..67a237732 100644
--- a/400_xowa/src/gplx/xowa/gui/views/Xog_launcher_tabs.java
+++ b/400_xowa/src/gplx/xowa/gui/views/Xog_launcher_tabs.java
@@ -65,11 +65,11 @@ class Xog_launcher_tabs {
Xog_tab_itm tab = win.Tab_mgr().Tabs_new_init(launch_wiki, Xoae_page.new_(launch_wiki, launch_ttl)); // WORKAROUND: set the tab to an empty page, else null ref later; DATE:2014-07-23
tab.Show_url_bgn(launch_url);
}
- public static final Xog_launcher_tabs _ = new Xog_launcher_tabs(); Xog_launcher_tabs() {}
+ public static final Xog_launcher_tabs _ = new Xog_launcher_tabs(); Xog_launcher_tabs() {}
}
class Io_fil_marker {
private Io_url url;
- private Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_._;
+ private Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_.I;
public Io_fil_marker Usr_dlg_(Gfo_usr_dlg v) {this.usr_dlg = v; return this;}
public Io_fil_marker Url_(Io_url url) {this.url = url; return this;}
public boolean Bgn() {
diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm.java b/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm.java
index efeadd739..f029db7a5 100644
--- a/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm.java
+++ b/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm.java
@@ -161,9 +161,9 @@ public class Xog_tab_itm implements GfoInvkAble {
// win.Page__async__bgn(this);
Gfo_thread_wkr async_wkr = null;
if (wkr.Hdump_enabled()) {
- wiki.File_mgr().Fsdb_mgr().Init_by_wiki(wiki);
+ wiki.File_mgr().Init_file_mgr_by_load(wiki);
Xof_fsdb_mgr fsdb_mgr = wiki.File_mgr().Fsdb_mgr();
- async_wkr = new Xof_file_wkr(fsdb_mgr.Orig_mgr(), fsdb_mgr.Bin_mgr(), fsdb_mgr.Mnt_mgr(), app.File_mgr__cache_mgr(), wiki.File_mgr__repo_mgr(), html_itm, page, page.Hdump_data().Imgs(), gplx.xowa.files.Xof_exec_tid.Tid_wiki_page);
+ async_wkr = new Xof_file_wkr(wiki.File_mgr__orig_mgr(), fsdb_mgr.Bin_mgr(), fsdb_mgr.Mnt_mgr(), app.File_mgr__cache_mgr(), wiki.File_mgr__repo_mgr(), html_itm, page, page.Hdump_data().Imgs(), gplx.xowa.files.Xof_exec_tid.Tid_wiki_page);
if (wiki.Html_mgr__hdump_enabled()) {
wiki.Html_mgr__hdump_wtr().Save(page);
}
@@ -177,6 +177,19 @@ public class Xog_tab_itm implements GfoInvkAble {
this.tab_is_loading = false;
}
}
+ public void Exec_async_hdump(Xoa_app app, Xow_wiki wiki, gplx.xowa.files.gui.Xog_js_wkr js_wkr, gplx.threads.Gfo_thread_pool thread_pool, Xoa_page page, ListAdp imgs, int[] redlink_ary) {
+ if (imgs.Count() > 0) {
+ Xof_file_wkr file_thread = new Xof_file_wkr
+ ( wiki.File_mgr__orig_mgr(), wiki.File_mgr__bin_mgr(), wiki.File_mgr__mnt_mgr()
+ , app.File_mgr__cache_mgr(), wiki.File_mgr__repo_mgr(), html_itm, page, imgs
+ , gplx.xowa.files.Xof_exec_tid.Tid_wiki_page);
+ thread_pool.Add_at_end(file_thread); thread_pool.Run();
+ }
+ if (redlink_ary.length > 0) {
+ Xog_redlink_thread redlink_thread = new Xog_redlink_thread(redlink_ary, js_wkr);
+ thread_pool.Add_at_end(redlink_thread); thread_pool.Run();
+ }
+ }
@gplx.Internal protected void Show_url_failed(Load_page_wkr wkr) {
try {
Xog_tab_itm_read_mgr.Show_page_err(win, this, wkr.Wiki(), wkr.Url(), wkr.Ttl(), wkr.Exc());
diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm_edit_mgr.java b/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm_edit_mgr.java
index c37c0d3dd..4dbe1791b 100644
--- a/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm_edit_mgr.java
+++ b/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm_edit_mgr.java
@@ -58,7 +58,7 @@ public class Xog_tab_itm_edit_mgr {
Xoh_page_wtr_wkr wkr = wiki.Html_mgr().Page_wtr_mgr().Wkr(Xopg_view_mode.Tid_read);
wkr.Page_(new_page);
wkr.XferAry(tmp_bfr, 0);
- byte[] new_html = tmp_bfr.Mkr_rls().Xto_bry_and_clear();
+ byte[] new_html = tmp_bfr.To_bry_and_rls();
new_page.Html_data().Edit_preview_(new_html);
Invalidate(wiki);
@@ -106,7 +106,7 @@ public class Xog_tab_itm_edit_mgr {
Bry_bfr bfr = win.App().Utl__bfr_mkr().Get_m001();
bfr.Add(new_page.Root().Root_src());
wiki.Ctx().Defn_trace().Print(data, bfr);
- new_page.Data_raw_(bfr.Mkr_rls().Xto_bry_and_clear());
+ new_page.Data_raw_(bfr.To_bry_and_rls());
byte old = tab.View_mode();
tab.View_mode_(view_tid);
Xog_tab_itm_read_mgr.Show_page(tab, new_page, false);
diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm_read_mgr.java b/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm_read_mgr.java
index 6108dd4ff..e21754694 100644
--- a/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm_read_mgr.java
+++ b/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm_read_mgr.java
@@ -36,7 +36,7 @@ public class Xog_tab_itm_read_mgr {
catch (Exception e) {
if (String_.Eq(Err_.Message_lang(e), "class org.eclipse.swt.SWTException Widget is disposed")) return; // ignore errors caused by user closing tab early; DATE:2014-07-26
if (show_is_err) { // trying to show error page, but failed; don't show again, else recursion until out of memory; TODO:always load error page; no reason it should fail; WHEN:html_skin; DATE:2014-06-08
- Gfo_usr_dlg_._.Warn_many("", "", "fatal error trying to load error page; page=~{0} err=~{1}" + new_page.Url().Xto_full_str_safe(), Err_.Message_gplx(e));
+ Gfo_usr_dlg_.I.Warn_many("", "", "fatal error trying to load error page; page=~{0} err=~{1}" + new_page.Url().Xto_full_str_safe(), Err_.Message_gplx(e));
return;
}
else
@@ -63,7 +63,7 @@ public class Xog_tab_itm_read_mgr {
if (url != null && ttl != null) {
try {url_str = url_parser.Build_str(url);}
catch (Exception e) { // HACK: failed pages will have a null wiki; for now, catch and ignore; DATE:2014-06-22
- Gfo_usr_dlg_._.Warn_many("", "", "failed to build url: url=~{0}, err=~{1}", String_.new_utf8_(url.Raw()), Err_.Message_gplx(e));
+ Gfo_usr_dlg_.I.Warn_many("", "", "failed to build url: url=~{0}, err=~{1}", String_.new_utf8_(url.Raw()), Err_.Message_gplx(e));
url_str = String_.new_utf8_(ttl.Full_txt());
}
win_str = String_.new_utf8_(Bry_.Add(ttl.Full_txt(), Win_text_suffix_page));
diff --git a/400_xowa/src/gplx/xowa/html/Xoh_html_wtr.java b/400_xowa/src/gplx/xowa/html/Xoh_html_wtr.java
index eca655890..40eb60a8d 100644
--- a/400_xowa/src/gplx/xowa/html/Xoh_html_wtr.java
+++ b/400_xowa/src/gplx/xowa/html/Xoh_html_wtr.java
@@ -644,7 +644,7 @@ class Xoh_display_ttl_wtr {
}
return false;
}
- public static final Xoh_display_ttl_wtr _ = new Xoh_display_ttl_wtr(); Xoh_display_ttl_wtr() {}
+ public static final Xoh_display_ttl_wtr _ = new Xoh_display_ttl_wtr(); Xoh_display_ttl_wtr() {}
}
/*
NOTE_1:inline always written as , not
diff --git a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr_.java b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr_.java
index f32025421..835a87713 100644
--- a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr_.java
+++ b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr_.java
@@ -38,7 +38,7 @@ public class Xoh_page_wtr_wkr_ {
if (head_end == null) return;
int insert_pos = Bry_finder.Find_fwd(html_bfr.Bfr(), Html_tag_.Head_rhs);
if (insert_pos == Bry_finder.Not_found) {
- Gfo_usr_dlg_._.Warn_many("", "", "could not find ");
+ Gfo_usr_dlg_.I.Warn_many("", "", "could not find ");
return;
}
html_bfr.Insert_at(insert_pos, head_end);
@@ -48,7 +48,7 @@ public class Xoh_page_wtr_wkr_ {
if (html_end == null) return;
int insert_pos = Bry_finder.Find_bwd(html_bfr.Bfr(), Html_tag_.Html_rhs, html_bfr.Len());
if (insert_pos == Bry_finder.Not_found) {
- Gfo_usr_dlg_._.Warn_many("", "", "could not find