diff --git a/400_xowa/src/gplx/core/brys/Bry_rdr.java b/100_core/src/gplx/core/brys/Bry_rdr.java
similarity index 51%
rename from 400_xowa/src/gplx/core/brys/Bry_rdr.java
rename to 100_core/src/gplx/core/brys/Bry_rdr.java
index de90405e5..14834b795 100644
--- a/400_xowa/src/gplx/core/brys/Bry_rdr.java
+++ b/100_core/src/gplx/core/brys/Bry_rdr.java
@@ -16,14 +16,21 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.core.brys; import gplx.*; import gplx.core.*;
-public class Bry_rdr {
- private byte[] src; private int src_len;
- public Bry_rdr Src_(byte[] src, int src_len) {this.src = src; this.src_len = src_len; pos = 0; return this;} public Bry_rdr Src_(byte[] src) {return Src_(src, src.length);}
- public int Pos() {return pos;} public Bry_rdr Pos_(int v) {this.pos = v; return this;} private int pos;
+public class Bry_rdr {
+ public byte[] Src() {return src;} protected byte[] src;
+ public int Src_len() {return src_len;} protected int src_len;
+ public void Init(byte[] src) {this.Init(src, 0);}
+ public void Init(byte[] src, int pos) {
+ this.src = src; this.src_len = src.length; this.pos = pos;
+ }
+ public int Pos() {return pos;} public Bry_rdr Pos_(int v) {this.pos = v; return this;} protected int pos;
+ public void Pos_add(int v) {pos += v;}
public boolean Pos_is_eos() {return pos == src_len;}
public void Pos_add_one() {++pos;}
public int Or_int() {return or_int;} public void Or_int_(int v) {or_int = v;} private int or_int = Int_.MinValue;
public byte[] Or_bry() {return or_bry;} public void Or_bry_(byte[] v) {or_bry = v;} private byte[] or_bry;
+ public int Find_fwd(byte find) {return Bry_finder.Find_fwd(src, find, pos);}
+ public int Find_fwd_ws() {return Bry_finder.Find_fwd_until_ws(src, pos, src_len);}
public int Find_fwd__pos_at_lhs(byte[] find_bry) {return Find_fwd__pos_at(find_bry, Bool_.N);}
public int Find_fwd__pos_at_rhs(byte[] find_bry) {return Find_fwd__pos_at(find_bry, Bool_.Y);}
public int Find_fwd__pos_at(byte[] find_bry, boolean pos_at_rhs) {
@@ -37,6 +44,7 @@ public class Bry_rdr {
public int Read_int_to_pipe() {return Read_int_to(Byte_ascii.Pipe);}
public int Read_int_to_nl() {return Read_int_to(Byte_ascii.NewLine);}
public int Read_int_to_quote() {return Read_int_to(Byte_ascii.Quote);}
+ public int Read_int_to_non_num(){return Read_int_to(Byte_ascii.Nil);}
public int Read_int_to(byte to_char) {
int bgn = pos;
int rv = 0;
@@ -54,8 +62,14 @@ public class Bry_rdr {
else // 1st negative
negative = -1; // flag negative
break;
- default:
- return b == to_char ? rv * negative : or_int;
+ default: {
+ boolean match = b == to_char;
+ if (to_char == Byte_ascii.Nil) {// hack for Read_int_to_non_num
+ --pos;
+ match = true;
+ }
+ return match ? rv * negative : or_int;
+ }
}
}
return bgn == pos ? or_int : rv * negative;
@@ -87,4 +101,55 @@ public class Bry_rdr {
byte[] double_bry = Read_bry_to(to_char);
return Double_.parse_(String_.new_a7(double_bry)); // double will never have utf8
}
+ @gplx.Virtual public Bry_rdr Skip_ws() {
+ while (pos < src_len) {
+ switch (src[pos]) {
+ case Byte_ascii.Tab: case Byte_ascii.NewLine: case Byte_ascii.CarriageReturn: case Byte_ascii.Space:
+ ++pos;
+ break;
+ default:
+ return this;
+ }
+ }
+ return this;
+ }
+ public Bry_rdr Skip_alpha_num_under() {
+ while (pos < src_len) {
+ switch (src[pos]) {
+ case Byte_ascii.Num_0: case Byte_ascii.Num_1: case Byte_ascii.Num_2: case Byte_ascii.Num_3: case Byte_ascii.Num_4:
+ case Byte_ascii.Num_5: case Byte_ascii.Num_6: case Byte_ascii.Num_7: case Byte_ascii.Num_8: case Byte_ascii.Num_9:
+ case Byte_ascii.Ltr_A: case Byte_ascii.Ltr_B: case Byte_ascii.Ltr_C: case Byte_ascii.Ltr_D: case Byte_ascii.Ltr_E:
+ case Byte_ascii.Ltr_F: case Byte_ascii.Ltr_G: case Byte_ascii.Ltr_H: case Byte_ascii.Ltr_I: case Byte_ascii.Ltr_J:
+ case Byte_ascii.Ltr_K: case Byte_ascii.Ltr_L: case Byte_ascii.Ltr_M: case Byte_ascii.Ltr_N: case Byte_ascii.Ltr_O:
+ case Byte_ascii.Ltr_P: case Byte_ascii.Ltr_Q: case Byte_ascii.Ltr_R: case Byte_ascii.Ltr_S: case Byte_ascii.Ltr_T:
+ case Byte_ascii.Ltr_U: case Byte_ascii.Ltr_V: case Byte_ascii.Ltr_W: case Byte_ascii.Ltr_X: case Byte_ascii.Ltr_Y: case Byte_ascii.Ltr_Z:
+ case Byte_ascii.Ltr_a: case Byte_ascii.Ltr_b: case Byte_ascii.Ltr_c: case Byte_ascii.Ltr_d: case Byte_ascii.Ltr_e:
+ case Byte_ascii.Ltr_f: case Byte_ascii.Ltr_g: case Byte_ascii.Ltr_h: case Byte_ascii.Ltr_i: case Byte_ascii.Ltr_j:
+ case Byte_ascii.Ltr_k: case Byte_ascii.Ltr_l: case Byte_ascii.Ltr_m: case Byte_ascii.Ltr_n: case Byte_ascii.Ltr_o:
+ case Byte_ascii.Ltr_p: case Byte_ascii.Ltr_q: case Byte_ascii.Ltr_r: case Byte_ascii.Ltr_s: case Byte_ascii.Ltr_t:
+ case Byte_ascii.Ltr_u: case Byte_ascii.Ltr_v: case Byte_ascii.Ltr_w: case Byte_ascii.Ltr_x: case Byte_ascii.Ltr_y: case Byte_ascii.Ltr_z:
+ case Byte_ascii.Underline:
+ ++pos;
+ break;
+ default:
+ return this;
+ }
+ }
+ return this;
+ }
+ public void Chk_bry_or_fail(byte[] bry) {
+ int bry_len = bry.length;
+ boolean match = Bry_.Match(src, pos, pos + bry_len, bry);
+ if (match) pos += bry_len;
+ else throw Err_.new_("bry.rdr:chk failed; bry={0} pos={1}", bry, pos);
+ }
+ public void Chk_byte_or_fail(byte b) {
+ boolean match = pos < src_len ? src[pos] == b : false;
+ if (match) ++pos;
+ else throw Err_.new_("bry.rdr:chk failed; byte={0} pos={1}", b, pos);
+ }
+ public byte[] Mid_by_len_safe(int len) {
+ int end = pos + len; if (end > src_len) end = src_len;
+ return Bry_.Mid(src, pos, end);
+ }
}
\ No newline at end of file
diff --git a/400_xowa/src/gplx/core/btries/Btrie_bwd_mgr.java b/100_core/src/gplx/core/btries/Btrie_bwd_mgr.java
similarity index 100%
rename from 400_xowa/src/gplx/core/btries/Btrie_bwd_mgr.java
rename to 100_core/src/gplx/core/btries/Btrie_bwd_mgr.java
diff --git a/400_xowa/src/gplx/core/btries/Btrie_bwd_mgr_tst.java b/100_core/src/gplx/core/btries/Btrie_bwd_mgr_tst.java
similarity index 100%
rename from 400_xowa/src/gplx/core/btries/Btrie_bwd_mgr_tst.java
rename to 100_core/src/gplx/core/btries/Btrie_bwd_mgr_tst.java
diff --git a/400_xowa/src/gplx/core/btries/Btrie_fast_mgr.java b/100_core/src/gplx/core/btries/Btrie_fast_mgr.java
similarity index 100%
rename from 400_xowa/src/gplx/core/btries/Btrie_fast_mgr.java
rename to 100_core/src/gplx/core/btries/Btrie_fast_mgr.java
diff --git a/400_xowa/src/gplx/core/btries/Btrie_fast_mgr_tst.java b/100_core/src/gplx/core/btries/Btrie_fast_mgr_tst.java
similarity index 100%
rename from 400_xowa/src/gplx/core/btries/Btrie_fast_mgr_tst.java
rename to 100_core/src/gplx/core/btries/Btrie_fast_mgr_tst.java
diff --git a/400_xowa/src/gplx/core/btries/Btrie_itm_stub.java b/100_core/src/gplx/core/btries/Btrie_itm_stub.java
similarity index 100%
rename from 400_xowa/src/gplx/core/btries/Btrie_itm_stub.java
rename to 100_core/src/gplx/core/btries/Btrie_itm_stub.java
diff --git a/400_xowa/src/gplx/core/btries/Btrie_mgr.java b/100_core/src/gplx/core/btries/Btrie_mgr.java
similarity index 100%
rename from 400_xowa/src/gplx/core/btries/Btrie_mgr.java
rename to 100_core/src/gplx/core/btries/Btrie_mgr.java
diff --git a/400_xowa/src/gplx/core/btries/Btrie_slim_itm.java b/100_core/src/gplx/core/btries/Btrie_slim_itm.java
similarity index 100%
rename from 400_xowa/src/gplx/core/btries/Btrie_slim_itm.java
rename to 100_core/src/gplx/core/btries/Btrie_slim_itm.java
diff --git a/400_xowa/src/gplx/core/btries/Btrie_slim_itm_tst.java b/100_core/src/gplx/core/btries/Btrie_slim_itm_tst.java
similarity index 100%
rename from 400_xowa/src/gplx/core/btries/Btrie_slim_itm_tst.java
rename to 100_core/src/gplx/core/btries/Btrie_slim_itm_tst.java
diff --git a/400_xowa/src/gplx/core/btries/Btrie_slim_mgr.java b/100_core/src/gplx/core/btries/Btrie_slim_mgr.java
similarity index 100%
rename from 400_xowa/src/gplx/core/btries/Btrie_slim_mgr.java
rename to 100_core/src/gplx/core/btries/Btrie_slim_mgr.java
diff --git a/400_xowa/src/gplx/core/btries/Btrie_slim_mgr_tst.java b/100_core/src/gplx/core/btries/Btrie_slim_mgr_tst.java
similarity index 100%
rename from 400_xowa/src/gplx/core/btries/Btrie_slim_mgr_tst.java
rename to 100_core/src/gplx/core/btries/Btrie_slim_mgr_tst.java
diff --git a/400_xowa/src/gplx/core/btries/Btrie_utf8_itm.java b/100_core/src/gplx/core/btries/Btrie_utf8_itm.java
similarity index 100%
rename from 400_xowa/src/gplx/core/btries/Btrie_utf8_itm.java
rename to 100_core/src/gplx/core/btries/Btrie_utf8_itm.java
diff --git a/400_xowa/src/gplx/core/btries/Btrie_utf8_mgr.java b/100_core/src/gplx/core/btries/Btrie_utf8_mgr.java
similarity index 100%
rename from 400_xowa/src/gplx/core/btries/Btrie_utf8_mgr.java
rename to 100_core/src/gplx/core/btries/Btrie_utf8_mgr.java
diff --git a/100_core/src_000_err/gplx/ErrProcData.java b/100_core/src_000_err/gplx/ErrProcData.java
index 8195e360f..be808aa52 100644
--- a/100_core/src_000_err/gplx/ErrProcData.java
+++ b/100_core/src_000_err/gplx/ErrProcData.java
@@ -42,7 +42,7 @@ class ErrProcData {
for (int i = 0; i < len; i++) {
ErrProcData md = ErrProcData.parse_(lines[i]);
if (md.SourceLine() == 0) break; // ASSUME: java code; not interested
- if (String_.HasAtBgn(md.signatureRaw, "gplx.Err_") || String_.HasAtBgn(md.signatureRaw, "gplx.Err.")) continue; // java includes entire stackTrace from point of creation; only care about point of throw
+ if (String_.Has_at_bgn(md.signatureRaw, "gplx.Err_") || String_.Has_at_bgn(md.signatureRaw, "gplx.Err.")) continue; // java includes entire stackTrace from point of creation; only care about point of throw
list.Add(md);
}
return (ErrProcData[])list.To_ary(ErrProcData.class);
diff --git a/100_core/src_110_primitive/gplx/Bry_.java b/100_core/src_110_primitive/gplx/Bry_.java
index 44528d201..cca325a6e 100644
--- a/100_core/src_110_primitive/gplx/Bry_.java
+++ b/100_core/src_110_primitive/gplx/Bry_.java
@@ -414,8 +414,8 @@ public class Bry_ {
if (src[i] == lkp) return true;
return false;
}
- public static boolean HasAtEnd(byte[] src, byte[] lkp) {int src_len = src.length; return HasAtEnd(src, lkp, src_len - lkp.length, src_len);}
- public static boolean HasAtEnd(byte[] src, byte[] lkp, int src_bgn, int src_end) {
+ public static boolean Has_at_end(byte[] src, byte[] lkp) {int src_len = src.length; return Has_at_end(src, lkp, src_len - lkp.length, src_len);}
+ public static boolean Has_at_end(byte[] src, byte[] lkp, int src_bgn, int src_end) {
int lkp_len = lkp.length;
if (src_bgn < 0) return false;
int pos = src_end - lkp_len; if (pos < src_bgn) return false; // lkp is longer than src
@@ -424,11 +424,11 @@ public class Bry_ {
}
return true;
}
- public static boolean HasAtBgn(byte[] src, byte lkp, int src_bgn) {
+ public static boolean Has_at_bgn(byte[] src, byte lkp, int src_bgn) {
return src_bgn < src.length ? src[src_bgn] == lkp : false;
}
- public static boolean HasAtBgn(byte[] src, byte[] lkp) {return HasAtBgn(src, lkp, 0, src.length);}
- public static boolean HasAtBgn(byte[] src, byte[] lkp, int src_bgn, int src_end) {
+ public static boolean Has_at_bgn(byte[] src, byte[] lkp) {return Has_at_bgn(src, lkp, 0, src.length);}
+ public static boolean Has_at_bgn(byte[] src, byte[] lkp, int src_bgn, int src_end) {
int lkp_len = lkp.length;
if (lkp_len + src_bgn > src_end) return false; // lkp is longer than src
for (int i = 0; i < lkp_len; i++) {
diff --git a/100_core/src_110_primitive/gplx/Bry__tst.java b/100_core/src_110_primitive/gplx/Bry__tst.java
index 8a069fb90..4ae71f392 100644
--- a/100_core/src_110_primitive/gplx/Bry__tst.java
+++ b/100_core/src_110_primitive/gplx/Bry__tst.java
@@ -47,7 +47,7 @@ public class Bry__tst {
}
Tfds.Eq_ary(expd, Bry_.XtoStrBytesByInt(val, Int_.DigitCount(val)));
}
- @Test public void HasAtEnd() {
+ @Test public void Has_at_end() {
tst_HasAtEnd("a|bcd|e", "d" , 2, 5, true); // y_basic
tst_HasAtEnd("a|bcd|e", "bcd" , 2, 5, true); // y_many
tst_HasAtEnd("a|bcd|e", "|bcd" , 2, 5, false); // n_long
@@ -56,14 +56,14 @@ public class Bry__tst {
tst_HasAtEnd("abc", "bd", false); // n
tst_HasAtEnd("a", "ab", false); // exceeds_len
}
- void tst_HasAtEnd(String src, String find, int bgn, int end, boolean expd) {Tfds.Eq(expd, Bry_.HasAtEnd(Bry_.new_u8(src), Bry_.new_u8(find), bgn, end));}
- void tst_HasAtEnd(String src, String find, boolean expd) {Tfds.Eq(expd, Bry_.HasAtEnd(Bry_.new_u8(src), Bry_.new_u8(find)));}
- @Test public void HasAtBgn() {
+ void tst_HasAtEnd(String src, String find, int bgn, int end, boolean expd) {Tfds.Eq(expd, Bry_.Has_at_end(Bry_.new_u8(src), Bry_.new_u8(find), bgn, end));}
+ void tst_HasAtEnd(String src, String find, boolean expd) {Tfds.Eq(expd, Bry_.Has_at_end(Bry_.new_u8(src), Bry_.new_u8(find)));}
+ @Test public void Has_at_bgn() {
tst_HasAtBgn("y_basic" , "a|bcd|e", "b" , 2, 5, true);
tst_HasAtBgn("y_many" , "a|bcd|e", "bcd" , 2, 5, true);
tst_HasAtBgn("n_long" , "a|bcd|e", "bcde" , 2, 5, false);
tst_HasAtBgn("n_pos" , "a|bcd|e", "|bc" , 2, 5, false);
- } void tst_HasAtBgn(String tst, String src, String find, int bgn, int end, boolean expd) {Tfds.Eq(expd, Bry_.HasAtBgn(Bry_.new_u8(src), Bry_.new_u8(find), bgn, end), tst);}
+ } void tst_HasAtBgn(String tst, String src, String find, int bgn, int end, boolean expd) {Tfds.Eq(expd, Bry_.Has_at_bgn(Bry_.new_u8(src), Bry_.new_u8(find), bgn, end), tst);}
@Test public void Match() {
tst_Match("abc", 0, "abc", true);
tst_Match("abc", 2, "c", true);
diff --git a/100_core/src_110_primitive/gplx/String_.java b/100_core/src_110_primitive/gplx/String_.java
index 6d43d8df6..2c1016297 100644
--- a/100_core/src_110_primitive/gplx/String_.java
+++ b/100_core/src_110_primitive/gplx/String_.java
@@ -79,8 +79,8 @@ public class String_ implements GfoInvkAble {
public static char CharAt(String s, int i) {return s.charAt(i);}
public static int CodePointAt(String s, int i) {return s.codePointAt(i);}
public static boolean Has(String s, String find) {return s.indexOf(find) != String_.Find_none;}
- public static boolean HasAtBgn(String s, String v) {return s.startsWith(v);}
- public static boolean HasAtEnd(String s, String v) {return s.endsWith(v);}
+ public static boolean Has_at_bgn(String s, String v) {return s.startsWith(v);}
+ public static boolean Has_at_end(String s, String v) {return s.endsWith(v);}
public static int FindFwd(String s, String find) {return s.indexOf(find);}
public static int FindFwd(String s, String find, int pos) {return s.indexOf(find, pos);}
public static int FindBwd(String s, String find) {return s.lastIndexOf(find);}
@@ -204,7 +204,7 @@ public class String_ implements GfoInvkAble {
}
public static String DelBgnIf(String s, String find) {
if (s == null) throw Err_arg.null_("s"); if (find == null) throw Err_arg.null_("find");
- return HasAtBgn(s, find) ? String_.Mid(s, Len(find)) : s;
+ return Has_at_bgn(s, find) ? String_.Mid(s, Len(find)) : s;
}
public static String DelEnd(String s, int count) {
if (count < 0) throw Err_arg.cannotBe_("< 0", "count", count);
@@ -214,7 +214,7 @@ public class String_ implements GfoInvkAble {
}
public static String DelEndIf(String s, String find) {
if (s == null) throw Err_arg.null_("s"); if (find == null) throw Err_arg.null_("find");
- return HasAtEnd(s, find) ? Mid_lang(s, 0, Len(s) - Len(find)) : s;
+ return Has_at_end(s, find) ? Mid_lang(s, 0, Len(s) - Len(find)) : s;
}
public static String LowerFirst(String s) {
int len = Len(s); if (len == 0) return String_.Empty;
diff --git a/100_core/src_120_basicDataType/gplx/EnmMgr.java b/100_core/src_120_basicDataType/gplx/EnmMgr.java
index 4580eec5d..53fabd0a3 100644
--- a/100_core/src_120_basicDataType/gplx/EnmMgr.java
+++ b/100_core/src_120_basicDataType/gplx/EnmMgr.java
@@ -35,7 +35,7 @@ public class EnmMgr {
String term = String_.Trim(ary[i]); // ex: key.ctrl + key.a
if (prefix != null) term = String_.Replace(term, prefix, "");
int cur = -1;
- if (String_.HasAtBgn(term, "#"))
+ if (String_.Has_at_bgn(term, "#"))
cur = Int_.parse_(String_.Mid(term, 1));
else
cur = Int_.cast_(rawRegy.Get_by(term));
diff --git a/100_core/src_120_basicDataType/gplx/Io_url.java b/100_core/src_120_basicDataType/gplx/Io_url.java
index ea3d5c83a..a1d264e9b 100644
--- a/100_core/src_120_basicDataType/gplx/Io_url.java
+++ b/100_core/src_120_basicDataType/gplx/Io_url.java
@@ -57,7 +57,7 @@ public class Io_url implements CompareAble, EqAble, ParseAble, GfoInvkAble { //_
}
public String GenRelUrl_orEmpty(Io_url dir) {
String dirRaw = dir.Raw();
- return String_.HasAtBgn(raw, dirRaw)
+ return String_.Has_at_bgn(raw, dirRaw)
? String_.DelBgn(raw, String_.Len(dirRaw))
: String_.Empty;
}
diff --git a/100_core/src_120_basicDataType/gplx/Io_url_.java b/100_core/src_120_basicDataType/gplx/Io_url_.java
index f86ed9c86..07a1bcfe4 100644
--- a/100_core/src_120_basicDataType/gplx/Io_url_.java
+++ b/100_core/src_120_basicDataType/gplx/Io_url_.java
@@ -55,7 +55,7 @@ public class Io_url_ {
private static String parse_http_file(String v, boolean wnt) {
byte[] v_bry = Bry_.new_u8(v);
int v_len = v_bry.length;
- if (Bry_.HasAtBgn(v_bry, Io_url.Http_file_bry, 0, v_len)) {
+ if (Bry_.Has_at_bgn(v_bry, Io_url.Http_file_bry, 0, v_len)) {
byte[] rv = new byte[v_len - Io_url.Http_file_len];
for (int i = 0; i < rv.length; i++) {
byte b = v_bry[i + Io_url.Http_file_len];
@@ -80,13 +80,13 @@ public class Io_url_ {
return Io_url_.new_any_(val);
}
static String EndsWith_or_add(String raw, String endsWith) {
- if (String_.HasAtEnd(raw, endsWith)) return raw;
+ if (String_.Has_at_end(raw, endsWith)) return raw;
return raw += endsWith;
}
public static Io_url Rel_dir(String s) {return IsAbs(s) ? Io_url_.new_dir_(s) : Env_.AppUrl().OwnerDir().GenSubDir(s);}
public static Io_url Rel_fil(String s) {return IsAbs(s) ? Io_url_.new_fil_(s) : Env_.AppUrl().OwnerDir().GenSubFil(s);}
static boolean IsAbs(String s) {
- return String_.HasAtBgn(s, Op_sys.Lnx.Fsys_dir_spr_str())
+ return String_.Has_at_bgn(s, Op_sys.Lnx.Fsys_dir_spr_str())
|| (String_.Len(s) > 2
&& ( (String_.CharAt(s, 1) == ':' && String_.CharAt(s, 2) == '\\')
|| (String_.CharAt(s, 1) == '\\' && String_.CharAt(s, 2) == '\\')
diff --git a/100_core/src_150_text/gplx/texts/Base64Converter.java b/100_core/src_150_text/gplx/texts/Base64Converter.java
index 8551f0694..5b3c340c3 100644
--- a/100_core/src_150_text/gplx/texts/Base64Converter.java
+++ b/100_core/src_150_text/gplx/texts/Base64Converter.java
@@ -55,7 +55,7 @@ public class Base64Converter {
public static byte[] Decode(String s){
if (toInt == null) Init();
int sLen = String_.Len(s);
- int delta = String_.HasAtEnd(s, "==") ? 2 : String_.HasAtEnd(s, "=") ? 1 : 0;
+ int delta = String_.Has_at_end(s, "==") ? 2 : String_.Has_at_end(s, "=") ? 1 : 0;
byte[] buffer = new byte[sLen *3/4 - delta];
int mask = 0xFF;
int index = 0;
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 36b5f8948..20f4c3be9 100644
--- a/100_core/src_200_io/gplx/ios/IoEngine_system.java
+++ b/100_core/src_200_io/gplx/ios/IoEngine_system.java
@@ -573,7 +573,7 @@ class Io_stream_rdr_http implements Io_stream_rdr {
return this;
}
read_done = false;
- this.exists = src_conn.getResponseCode() == 200; // ASSUME: response code of 200 means that file exists; note that content_length seems to always be -1; DATE:2015-05-20
+ this.exists = Int_.In(src_conn.getResponseCode(), 200, 301); // ASSUME: response code of 200 (OK) or 301 (Redirect) means that file exists; note that content_length seems to always be -1; DATE:2015-05-20
src_stream = new java.io.BufferedInputStream(src_conn.getInputStream());
xfer_fmt.Bgn(content_length);
}
diff --git a/100_core/src_200_io/gplx/ios/IoItmDir.java b/100_core/src_200_io/gplx/ios/IoItmDir.java
index 3793dd381..04371ae7e 100644
--- a/100_core/src_200_io/gplx/ios/IoItmDir.java
+++ b/100_core/src_200_io/gplx/ios/IoItmDir.java
@@ -41,7 +41,7 @@ public class IoItmDir extends IoItm_base {
String dirSpr = this.Url().Info().DirSpr(); int dirSprLen = String_.Len(dirSpr);
String currDirStr = this.Url().Raw();
String findDirStr = findDirUrl.Raw();
- if (!String_.HasAtBgn(findDirStr, currDirStr)) return null; // findUrl must start with currUrl;
+ if (!String_.Has_at_bgn(findDirStr, currDirStr)) return null; // findUrl must start with currUrl;
String findName = String_.DelEnd(currDirStr, dirSprLen); // seed findName for String_.MidByLen below;
IoItmDir curDir = this;
while (true) {
diff --git a/100_core/src_200_io/gplx/ios/IoRecycleBin.java b/100_core/src_200_io/gplx/ios/IoRecycleBin.java
index 6136912d7..a415e21ba 100644
--- a/100_core/src_200_io/gplx/ios/IoRecycleBin.java
+++ b/100_core/src_200_io/gplx/ios/IoRecycleBin.java
@@ -42,7 +42,7 @@ public class IoRecycleBin {
String nameAndExt = url.NameAndExt_noDirSpr() + "|";
for (int i = linesLen; i > 0; i--) {
String line = lines[i - 1];
- if (String_.HasAtBgn(line, nameAndExt)) {
+ if (String_.Has_at_bgn(line, nameAndExt)) {
String[] terms = String_.Split(line, "|");
Io_url origUrl = url.OwnerRoot().GenSubFil(terms[1]);
list.Add(origUrl);
diff --git a/100_core/src_200_io/gplx/ios/IoUrlInfo.java b/100_core/src_200_io/gplx/ios/IoUrlInfo.java
index c16a5a1cb..a128beff6 100644
--- a/100_core/src_200_io/gplx/ios/IoUrlInfo.java
+++ b/100_core/src_200_io/gplx/ios/IoUrlInfo.java
@@ -60,7 +60,7 @@ abstract class IoUrlInfo_base implements IoUrlInfo {
public abstract boolean CaseSensitive();
public abstract boolean Match(String raw);
public abstract String EngineKey();
- public boolean IsDir(String raw) {return String_.HasAtEnd(raw, DirSpr());}
+ public boolean IsDir(String raw) {return String_.Has_at_end(raw, DirSpr());}
public abstract String XtoRootName(String raw, int rawLen);
@gplx.Virtual public String Xto_api(String raw) {
return IsDir(raw)
@@ -142,7 +142,7 @@ class IoUrlInfo_lnx extends IoUrlInfo_base {
@Override public String DirSpr() {return DirSprStr;} static final String DirSprStr = Op_sys.Lnx.Fsys_dir_spr_str();
@Override public byte DirSpr_byte() {return Byte_ascii.Slash;}
@Override public boolean CaseSensitive() {return Op_sys.Lnx.Fsys_case_match();}
- @Override public boolean Match(String raw) {return String_.HasAtBgn(raw, DirSprStr);} // anything that starts with /
+ @Override public boolean Match(String raw) {return String_.Has_at_bgn(raw, DirSprStr);} // anything that starts with /
@Override public String XtoRootName(String raw, int rawLen) {
return rawLen == 1 && String_.Eq(raw, DirSprStr)
? "root"
@@ -180,7 +180,7 @@ class IoUrlInfo_mem extends IoUrlInfo_base {
@Override public String XtoRootName(String raw, int rawLen) {
return String_.Eq(raw, key) ? String_.DelEnd(key, 1) : null;
}
- @Override public boolean Match(String raw) {return String_.HasAtBgn(raw, key);}
+ @Override public boolean Match(String raw) {return String_.Has_at_bgn(raw, key);}
public static IoUrlInfo_mem new_(String key, String engineKey) {
IoUrlInfo_mem rv = new IoUrlInfo_mem();
rv.key = key; rv.engineKey = engineKey;
@@ -196,7 +196,7 @@ class IoUrlInfo_alias extends IoUrlInfo_base {
@Override public String XtoRootName(String raw, int rawLen) {
return String_.Eq(raw, srcRootDir) ? srcRootName : null;
}
- @Override public boolean Match(String raw) {return String_.HasAtBgn(raw, srcDir);}
+ @Override public boolean Match(String raw) {return String_.Has_at_bgn(raw, srcDir);}
@Override public String Xto_api(String raw) {
String rv = String_.Replace(raw, srcDir, trgDir); // replace src with trg
if (!String_.Eq(srcDirSpr, trgDirSpr)) rv = String_.Replace(rv, srcDirSpr, trgDirSpr); // replace dirSprs
diff --git a/100_core/src_210_env/gplx/Op_sys.java b/100_core/src_210_env/gplx/Op_sys.java
index 73061aa98..2d40db452 100644
--- a/100_core/src_210_env/gplx/Op_sys.java
+++ b/100_core/src_210_env/gplx/Op_sys.java
@@ -66,7 +66,7 @@ public class Op_sys {
else throw Err_mgr._.fmt_(GRP_KEY, "unknown_bitness", "unknown bitness; expecting 32 or 64; System.getProperty(\"bit.level\") yielded ~{0}", bitness_str);
os_name = System.getProperty("os.name").toLowerCase();
- if (String_.HasAtBgn(os_name, "win")) {
+ if (String_.Has_at_bgn(os_name, "win")) {
String os_version = System.getProperty("os.version").toLowerCase();// "Windows 7".equals(osName) && "6.1".equals(osVersion);
byte sub_tid = Sub_tid_unknown;
if (String_.Eq(os_name, "windows xp") && String_.Eq(os_version, "5.1")) sub_tid = Sub_tid_win_xp;
@@ -75,7 +75,7 @@ public class Op_sys {
return new_wnt_(bitness_byte, sub_tid);
}
else if (String_.Eq(os_name, "linux")) return new_unx_flavor_(Tid_lnx, os_name, bitness_byte);
- else if (String_.HasAtBgn(os_name, "mac")) return new_unx_flavor_(Tid_osx, os_name, bitness_byte); // EX:Mac OS X
+ else if (String_.Has_at_bgn(os_name, "mac")) return new_unx_flavor_(Tid_osx, os_name, bitness_byte); // EX:Mac OS X
else throw Err_mgr._.fmt_(GRP_KEY, "unknown_os_name", "unknown os_name; expecting windows, linux, mac; System.getProperty(\"os.name\") yielded ~{0}", os_name);
} catch (Exception exc) {Drd.os_name = os_name; return Drd;}
}
diff --git a/140_dbs/src/gplx/dbs/Db_conn.java b/140_dbs/src/gplx/dbs/Db_conn.java
index 7c21d0151..45f0ed1f9 100644
--- a/140_dbs/src/gplx/dbs/Db_conn.java
+++ b/140_dbs/src/gplx/dbs/Db_conn.java
@@ -44,7 +44,7 @@ public class Db_conn {
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 boolean Schema_tbl_exists(String tbl) {return engine.Schema_tbl_exists(tbl);}
+ public boolean Meta_tbl_exists(String tbl) {return engine.Meta_tbl_exists(tbl);}
public void Rls_reg(RlsAble rls) {rls_list.Add(rls);}
public void Rls_conn() {
int len = rls_list.Count();
diff --git a/140_dbs/src/gplx/dbs/Db_conn_info_.java b/140_dbs/src/gplx/dbs/Db_conn_info_.java
index 81c76361e..8fcebfcec 100644
--- a/140_dbs/src/gplx/dbs/Db_conn_info_.java
+++ b/140_dbs/src/gplx/dbs/Db_conn_info_.java
@@ -19,7 +19,7 @@ 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_conn_info_ {
- public static final Db_conn_info Null = Null_conn_info._;
+ public static final Db_conn_info Null = Noop_conn_info.I;
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);}
@@ -30,7 +30,7 @@ public class Db_conn_info_ {
class Db_conn_info_pool {
private Ordered_hash regy = Ordered_hash_.new_();
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(Noop_conn_info.I).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_conn_info_pool Add(Db_conn_info itm) {regy.Add_if_dupe_use_nth(itm.Tid(), itm); return this;}
diff --git a/140_dbs/src/gplx/dbs/Db_conn_pool.java b/140_dbs/src/gplx/dbs/Db_conn_pool.java
index 98e2563e2..31dea9152 100644
--- a/140_dbs/src/gplx/dbs/Db_conn_pool.java
+++ b/140_dbs/src/gplx/dbs/Db_conn_pool.java
@@ -41,6 +41,6 @@ public class Db_conn_pool {
}
public static final Db_conn_pool I = new Db_conn_pool(); Db_conn_pool() {this.Init();}
private void Init() {
- this.Engines__add(Null_engine._, TdbEngine._, Mysql_engine._, Postgres_engine._, Sqlite_engine._, Db_engine__mem._);
+ this.Engines__add(Noop_engine._, TdbEngine._, Mysql_engine._, Postgres_engine._, Sqlite_engine._, Db_engine__mem._);
}
}
diff --git a/140_dbs/src/gplx/dbs/Db_meta_fld.java b/140_dbs/src/gplx/dbs/Db_meta_fld.java
index 127a9b87b..020d4e88c 100644
--- a/140_dbs/src/gplx/dbs/Db_meta_fld.java
+++ b/140_dbs/src/gplx/dbs/Db_meta_fld.java
@@ -28,7 +28,7 @@ public class Db_meta_fld {
public boolean Primary() {return primary;} private final boolean primary;
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 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, Tid_decimal = 10, Tid_date = 11;
public static final String Key_null = null;
public static final int Len_null = -1;
public static final String[] Ary_empy = String_.Ary_empty;
diff --git a/140_dbs/src/gplx/dbs/Db_meta_tbl.java b/140_dbs/src/gplx/dbs/Db_meta_tbl.java
index 9ca1f2506..6f7cd1faf 100644
--- a/140_dbs/src/gplx/dbs/Db_meta_tbl.java
+++ b/140_dbs/src/gplx/dbs/Db_meta_tbl.java
@@ -24,6 +24,17 @@ public class Db_meta_tbl {
}
public String Name() {return name;} private final String name;
public Db_meta_fld[] Flds() {return flds;} private final Db_meta_fld[] flds;
+ public boolean Flds_has(String fld) {
+ if (flds_hash == null) {
+ flds_hash = Ordered_hash_.new_();
+ int len = flds.length;
+ for (int i = 0; i < len; ++i) {
+ Db_meta_fld fld_itm = flds[i];
+ flds_hash.Add(fld_itm.Name(), fld_itm);
+ }
+ }
+ return flds_hash.Has(fld);
+ } private Ordered_hash flds_hash;
public Db_meta_idx[] Idxs() {return idxs;} private final Db_meta_idx[] idxs;
public String To_sql_create() {return Db_sqlbldr__sqlite.I.Bld_create_tbl(this);}
public static Db_meta_tbl new_(String name, Db_meta_fld_list flds, Db_meta_idx... idxs) {return new Db_meta_tbl(name, flds.To_fld_ary(), idxs);}
diff --git a/140_dbs/src/gplx/dbs/Db_rdr.java b/140_dbs/src/gplx/dbs/Db_rdr.java
index 101836065..5c9f820b2 100644
--- a/140_dbs/src/gplx/dbs/Db_rdr.java
+++ b/140_dbs/src/gplx/dbs/Db_rdr.java
@@ -18,25 +18,16 @@ along with this program. If not, see .
package gplx.dbs; import gplx.*;
public interface Db_rdr {
boolean Move_next();
- byte[] Read_bry(int i);
byte[] Read_bry(String k);
- byte[] Read_bry_by_str(int i);
+ byte[] Read_bry_in_parts(String tbl, String fld, String crt_key, Object crt_val);
byte[] Read_bry_by_str(String k);
- String Read_str(int i);
String Read_str(String k);
- byte Read_byte(int i);
byte Read_byte(String k);
- int Read_int(int i);
int Read_int(String k);
- long Read_long(int i);
long Read_long(String k);
- float Read_float(int i);
float Read_float(String k);
- double Read_double(int i);
double Read_double(String k);
- DateAdp Read_date_by_str(int i);
DateAdp Read_date_by_str(String k);
- boolean Read_bool_by_byte(int i);
boolean Read_bool_by_byte(String k);
void Rls();
}
diff --git a/140_dbs/src/gplx/dbs/Db_rdr_.java b/140_dbs/src/gplx/dbs/Db_rdr_.java
index cdf1508ea..c0d0b1735 100644
--- a/140_dbs/src/gplx/dbs/Db_rdr_.java
+++ b/140_dbs/src/gplx/dbs/Db_rdr_.java
@@ -21,25 +21,16 @@ public class 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;}
- public byte[] Read_bry_by_str(int i) {return Bry_.Empty;}
public byte[] Read_bry_by_str(String k) {return Bry_.Empty;}
- public byte Read_byte(int i) {return Byte_.Max_value_127;}
+ public byte[] Read_bry_in_parts(String tbl, String fld, String crt_key, Object crt_val) {return Bry_.Empty;}
public byte Read_byte(String k) {return Byte_.Max_value_127;}
- public String Read_str(int i) {return String_.Empty;}
public String Read_str(String k) {return String_.Empty;}
- public DateAdp Read_date_by_str(int i) {return DateAdp_.MinValue;}
public DateAdp Read_date_by_str(String k) {return DateAdp_.MinValue;}
- public int Read_int(int i) {return Int_.MinValue;}
public int Read_int(String k) {return Int_.MinValue;}
- public long Read_long(int i) {return Long_.MinValue;}
public long Read_long(String k) {return Long_.MinValue;}
- public float Read_float(int i) {return Float_.NaN;}
public float Read_float(String k) {return Float_.NaN;}
- public double Read_double(int i) {return Double_.NaN;}
public double Read_double(String k) {return Double_.NaN;}
- public boolean Read_bool_by_byte(int i) {return false;}
public boolean Read_bool_by_byte(String k) {return false;}
public void Rls() {}
}
diff --git a/140_dbs/src/gplx/dbs/Db_rdr__basic.java b/140_dbs/src/gplx/dbs/Db_rdr__basic.java
index 767790348..2bb70d738 100644
--- a/140_dbs/src/gplx/dbs/Db_rdr__basic.java
+++ b/140_dbs/src/gplx/dbs/Db_rdr__basic.java
@@ -26,25 +26,16 @@ public class Db_rdr__basic implements Db_rdr {
try {return rdr.next();}
catch (Exception e) {throw Err_.new_fmt_("move_next failed; check column casting error in SQL: err={0} sql={1}", Err_.Message_lang(e), sql);}
}
- @gplx.Virtual public byte[] Read_bry(int i) {try {return rdr.getBytes(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Bry_.Cls_val_name, Err_.Message_lang(e));}}
@gplx.Virtual public byte[] Read_bry(String k) {try {return (byte[])rdr.getObject(k);} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Bry_.Cls_val_name, Err_.Message_lang(e));}}
- @gplx.Virtual public byte[] Read_bry_by_str(int i) {try {return Bry_.new_u8(rdr.getString(i + 1));} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, String_.Cls_val_name, Err_.Message_lang(e));}}
@gplx.Virtual public byte[] Read_bry_by_str(String k) {try {return Bry_.new_u8((String)rdr.getObject(k));} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, String_.Cls_val_name, Err_.Message_lang(e));}}
- @gplx.Virtual public String Read_str(int i) {try {return rdr.getString(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, String_.Cls_val_name, Err_.Message_lang(e));}}
+ @gplx.Virtual public byte[] Read_bry_in_parts(String tbl, String fld, String crt_key, Object crt_val) {throw Err_.not_implemented_();}
@gplx.Virtual public String Read_str(String k) {try {return (String)rdr.getObject(k);} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, String_.Cls_val_name, Err_.Message_lang(e));}}
- @gplx.Virtual public DateAdp Read_date_by_str(int i) {return DateAdp_.parse_iso8561(Read_str(i));}
@gplx.Virtual public DateAdp Read_date_by_str(String k) {return DateAdp_.parse_iso8561(Read_str(k));}
- @gplx.Virtual public int Read_int(int i) {try {return rdr.getInt(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Int_.Cls_val_name, Err_.Message_lang(e));}}
@gplx.Virtual public int Read_int(String k) {try {return Int_.cast_(rdr.getObject(k));} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Int_.Cls_val_name, Err_.Message_lang(e));}}
- @gplx.Virtual public long Read_long(int i) {try {return rdr.getLong(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Long_.Cls_val_name, Err_.Message_lang(e));}}
@gplx.Virtual public long Read_long(String k) {try {return Long_.cast_(rdr.getObject(k));} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Long_.Cls_val_name, Err_.Message_lang(e));}}
- @gplx.Virtual public float Read_float(int i) {try {return rdr.getFloat(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Float_.Cls_val_name, Err_.Message_lang(e));}}
@gplx.Virtual public float Read_float(String k) {try {return Float_.cast_(rdr.getObject(k));} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Float_.Cls_val_name, Err_.Message_lang(e));}}
- @gplx.Virtual public double Read_double(int i) {try {return rdr.getDouble(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Double_.Cls_val_name, Err_.Message_lang(e));}}
@gplx.Virtual public double Read_double(String k) {try {return Double_.cast_(rdr.getObject(k));} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Double_.Cls_val_name, Err_.Message_lang(e));}}
- @gplx.Virtual public byte Read_byte(int i) {try {return rdr.getByte(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));}}
@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();}
diff --git a/140_dbs/src/gplx/dbs/engines/Db_engine.java b/140_dbs/src/gplx/dbs/engines/Db_engine.java
index 9c8da6527..1f8c21544 100644
--- a/140_dbs/src/gplx/dbs/engines/Db_engine.java
+++ b/140_dbs/src/gplx/dbs/engines/Db_engine.java
@@ -38,5 +38,6 @@ public interface Db_engine {
void Ddl_delete_tbl(String tbl);
void Env_db_attach(String alias, Io_url db_url);
void Env_db_detach(String alias);
- boolean Schema_tbl_exists(String name);
+ boolean Meta_tbl_exists(String tbl);
+ boolean Meta_fld_exists(String tbl, String fld);
}
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 e496078b7..d1e1e4671 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
@@ -74,7 +74,8 @@ public abstract class Db_engine_sql_base implements Db_engine {
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 boolean Schema_tbl_exists(String name) {return false;}
+ @gplx.Virtual public boolean Meta_tbl_exists(String tbl) {return false;}
+ @gplx.Virtual public boolean Meta_fld_exists(String tbl, String fld) {return false;}
@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) {
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 d7ff88f65..aca67d4f2 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
@@ -46,6 +46,11 @@ public class Db_engine__mem implements Db_engine {
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 boolean Schema_tbl_exists(String name) {return tbl_hash.Has(name);}
+ public boolean Meta_tbl_exists(String tbl) {return tbl_hash.Has(tbl);}
+ public boolean Meta_fld_exists(String tbl, String fld) {
+ Mem_tbl mem_tbl = (Mem_tbl)tbl_hash.Get_by(tbl); if (mem_tbl == null) return false;
+ return mem_tbl.Meta().Flds_has(fld);
+ }
+// public boolean Meta_fld_exists(String name) {return tbl_hash.Has(name);}
public static final Db_engine__mem _ = new Db_engine__mem(); Db_engine__mem() {}
}
diff --git a/140_dbs/src/gplx/dbs/engines/mems/Db_rdr__mem.java b/140_dbs/src/gplx/dbs/engines/mems/Db_rdr__mem.java
index 342e8525a..7882dc710 100644
--- a/140_dbs/src/gplx/dbs/engines/mems/Db_rdr__mem.java
+++ b/140_dbs/src/gplx/dbs/engines/mems/Db_rdr__mem.java
@@ -28,25 +28,16 @@ public class Db_rdr__mem implements Db_rdr {
row = rows[row_idx];
return rv;
}
- public byte[] Read_bry(int i) {return (byte[])row.Get_at(i);}
public byte[] Read_bry(String k) {return (byte[])row.Get_by(k);}
- public String Read_str(int i) {return (String)row.Get_at(i);}
public String Read_str(String k) {return (String)row.Get_by(k);}
- public byte[] Read_bry_by_str(int i) {return Bry_.new_u8_safe((String)row.Get_at(i));} // NOTE: null b/c db can have NULL
public byte[] Read_bry_by_str(String k) {return Bry_.new_u8_safe((String)row.Get_by(k));} // NOTE: null b/c db can have NULL
- public DateAdp Read_date_by_str(int i) {return DateAdp_.parse_iso8561((String)row.Get_at(i));}
+ @gplx.Virtual public byte[] Read_bry_in_parts(String tbl, String fld, String crt_key, Object crt_val) {throw Err_.not_implemented_();}
public DateAdp Read_date_by_str(String k) {return DateAdp_.parse_iso8561((String)row.Get_by(k));}
- public byte Read_byte(int i) {return Byte_.cast_(row.Get_at(i));}
public byte Read_byte(String k) {return Byte_.cast_(row.Get_by(k));}
- public int Read_int(int i) {return Int_.cast_(row.Get_at(i));}
public int Read_int(String k) {return Int_.cast_(row.Get_by(k));}
- public long Read_long(int i) {return Long_.cast_(row.Get_at(i));}
public long Read_long(String k) {return Long_.cast_(row.Get_by(k));}
- public float Read_float(int i) {return Float_.cast_(row.Get_at(i));}
public float Read_float(String k) {return Float_.cast_(row.Get_by(k));}
- public double Read_double(int i) {return Double_.cast_(row.Get_at(i));}
public double Read_double(String k) {return Double_.cast_(row.Get_by(k));}
- public boolean Read_bool_by_byte(int i) {return Byte_.cast_(row.Get_at(i)) == 1;}
public boolean Read_bool_by_byte(String k) {return Byte_.cast_(row.Get_by(k)) == 1;}
public void Rls() {}
}
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 72fdad842..531a995ff 100644
--- a/140_dbs/src/gplx/dbs/engines/mems/Mem_tbl.java
+++ b/140_dbs/src/gplx/dbs/engines/mems/Mem_tbl.java
@@ -19,9 +19,9 @@ package gplx.dbs.engines.mems; import gplx.*; import gplx.dbs.*; import gplx.dbs
import gplx.core.primitives.*; import gplx.core.criterias.*; import gplx.dbs.qrys.*;
public class Mem_tbl {
private final List_adp rows = List_adp_.new_(); private final List_adp where_rows = List_adp_.new_();
- private final Hash_adp autonum_hash = Hash_adp_.new_();
- private final Db_meta_tbl meta;
+ private final Hash_adp autonum_hash = Hash_adp_.new_();
public Mem_tbl(Db_meta_tbl meta) {this.meta = meta;}
+ public Db_meta_tbl Meta() {return meta;} private final Db_meta_tbl meta;
public int Insert(Db_stmt__mem stmt) {
Mem_itm itm = new Mem_itm();
Db_meta_fld[] flds = meta.Flds();
diff --git a/140_dbs/src/gplx/dbs/engines/nulls/Null_conn_info.java b/140_dbs/src/gplx/dbs/engines/nulls/Noop_conn_info.java
similarity index 84%
rename from 140_dbs/src/gplx/dbs/engines/nulls/Null_conn_info.java
rename to 140_dbs/src/gplx/dbs/engines/nulls/Noop_conn_info.java
index ea017b24b..868328437 100644
--- a/140_dbs/src/gplx/dbs/engines/nulls/Null_conn_info.java
+++ b/140_dbs/src/gplx/dbs/engines/nulls/Noop_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_conn_info extends Db_conn_info__base {
+public class Noop_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_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", "");}
+ public static final Noop_conn_info I = new Noop_conn_info(); Noop_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/Noop_engine.java
similarity index 84%
rename from 140_dbs/src/gplx/dbs/engines/nulls/Null_engine.java
rename to 140_dbs/src/gplx/dbs/engines/nulls/Noop_engine.java
index e864405ff..049be5535 100644
--- a/140_dbs/src/gplx/dbs/engines/nulls/Null_engine.java
+++ b/140_dbs/src/gplx/dbs/engines/nulls/Noop_engine.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_engine implements Db_engine {
- public String Tid() {return Null_conn_info.Tid_const;}
+public class Noop_engine implements Db_engine {
+ public String Tid() {return Noop_conn_info.Tid_const;}
public Db_conn_info Conn_info() {return Db_conn_info_.Null;}
public void Conn_open() {}
public void Conn_term() {}
@@ -38,6 +38,7 @@ public class Null_engine implements Db_engine {
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 boolean Schema_tbl_exists(String name) {return false;}
- public static final Null_engine _ = new Null_engine(); Null_engine() {}
+ public boolean Meta_tbl_exists(String tbl) {return false;}
+ public boolean Meta_fld_exists(String tbl, String fld) {return false;}
+ public static final Noop_engine _ = new Noop_engine(); Noop_engine() {}
}
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 d18adb41b..479973882 100644
--- a/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_engine.java
+++ b/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_engine.java
@@ -39,7 +39,8 @@ public class Sqlite_engine extends Db_engine_sql_base {
@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();}
- @Override public boolean Schema_tbl_exists(String name) {return schema_mgr.Tbl_exists(name);}
+ @Override public boolean Meta_tbl_exists(String tbl) {return schema_mgr.Tbl_exists(tbl);}
+ @Override public boolean Meta_fld_exists(String tbl, String fld) {return schema_mgr.Fld_exists(tbl, fld);}
static boolean loaded = false;
@gplx.Internal @Override protected Connection Conn_new() {
if (!loaded) {
@@ -55,8 +56,7 @@ public class Sqlite_engine extends Db_engine_sql_base {
}
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));}}
+class Db_rdr__sqlite extends Db_rdr__basic { @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));}}
@Override public boolean Read_bool_by_byte(String k) {
try {
int val = rdr.getInt(k);
diff --git a/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_schema_mgr.java b/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_schema_mgr.java
index c44e3b445..70e7c1a18 100644
--- a/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_schema_mgr.java
+++ b/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_schema_mgr.java
@@ -16,36 +16,47 @@ 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.schemas.*; import gplx.dbs.qrys.*;
+import gplx.dbs.qrys.*;
+import gplx.dbs.metas.*; import gplx.dbs.metas.parsers.*;
public class Sqlite_schema_mgr {
private final Db_engine engine; private boolean init = true;
public Sqlite_schema_mgr(Db_engine engine) {this.engine = engine;}
- public Schema_tbl_mgr Tbl_mgr() {return tbl_mgr;} private final Schema_tbl_mgr tbl_mgr = new Schema_tbl_mgr();
- public Schema_idx_mgr Idx_mgr() {return idx_mgr;} private final Schema_idx_mgr idx_mgr = new Schema_idx_mgr();
+ public Meta_tbl_mgr Tbl_mgr() {return tbl_mgr;} private final Meta_tbl_mgr tbl_mgr = new Meta_tbl_mgr();
+ public Meta_idx_mgr Idx_mgr() {return idx_mgr;} private final Meta_idx_mgr idx_mgr = new Meta_idx_mgr();
public boolean Tbl_exists(String name) {
if (init) Init(engine);
return tbl_mgr.Has(name);
}
+ public boolean Fld_exists(String tbl, String fld) {
+ if (init) Init(engine);
+ Meta_tbl_itm tbl_itm = tbl_mgr.Get_by(tbl);
+ return (tbl_itm == null) ? false : tbl_itm.Flds().Has(fld);
+ }
private void Init(Db_engine engine) {
init = false;
Gfo_usr_dlg_.I.Log_many("", "", "db.schema.load.bgn: conn=~{0}", engine.Conn_info().Xto_api());
+ Meta_parser__tbl tbl_parser = new Meta_parser__tbl();
Db_qry__select_in_tbl qry = Db_qry__select_in_tbl.new_("sqlite_master", String_.Ary_empty, String_.Ary("type", "name", "sql"), Db_qry__select_in_tbl.Order_by_null);
Db_rdr rdr = engine.New_stmt_prep(qry).Exec_select__rls_auto();
try {
while (rdr.Move_next()) {
- String type_str = rdr.Read_str(0);
- int type_int = Schema_itm_tid.Xto_int(type_str);
+ String type_str = rdr.Read_str("type");
+ String name = rdr.Read_str("name");
+ String sql = rdr.Read_str("sql");
+ int type_int = Meta_itm_tid.Xto_int(type_str);
switch (type_int) {
- case Schema_itm_tid.Tid_table:
- Schema_tbl_itm tbl_itm = new Schema_tbl_itm(rdr.Read_str(1), rdr.Read_str(2));
+ case Meta_itm_tid.Tid_table:
+ if (String_.Eq(name, "sqlite_sequence")) continue; // ignore b/c of non-orthodox syntax; EX: "CREATE TABLE sqlite_sequence(name, seq)";
+ // Meta_tbl_itm tbl_itm = new Meta_tbl_itm(tbl_name, tbl_sql);
+ Meta_tbl_itm tbl_itm = tbl_parser.Parse(Bry_.new_u8(sql));
tbl_mgr.Add(tbl_itm);
break;
- case Schema_itm_tid.Tid_index:
- Schema_idx_itm idx_itm = new Schema_idx_itm(rdr.Read_str(1), rdr.Read_str(2));
+ case Meta_itm_tid.Tid_index:
+ Meta_idx_itm idx_itm = new Meta_idx_itm(name, sql);
idx_mgr.Add(idx_itm);
break;
default:
- Gfo_usr_dlg_.I.Log_many("", "", "db.schema.unknown type: conn=~{0} type=~{1} name=~{2} sql=~{3}", engine.Conn_info().Xto_api(), type_str, rdr.Read_str(1), rdr.Read_str(2));
+ Gfo_usr_dlg_.I.Log_many("", "", "db.schema.unknown type: conn=~{0} type=~{1} name=~{2} sql=~{3}", engine.Conn_info().Xto_api(), type_str, name, sql);
break;
}
}
diff --git a/140_dbs/src/gplx/dbs/engines/tdbs/TdbEngine.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbEngine.java
index 2279d25fb..3e4daaa2a 100644
--- a/140_dbs/src/gplx/dbs/engines/tdbs/TdbEngine.java
+++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbEngine.java
@@ -63,7 +63,8 @@ public class TdbEngine implements Db_engine {
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 boolean Schema_tbl_exists(String name) {return false;}
+ public boolean Meta_tbl_exists(String name) {return false;}
+ public boolean Meta_fld_exists(String tbl, String fld) {return false;}
Hash_adp wkrs = Hash_adp_.new_(); TdbDbLoadMgr loadMgr = TdbDbLoadMgr.new_(); TdbDbSaveMgr saveMgr = TdbDbSaveMgr.new_();
public static final TdbEngine _ = new TdbEngine();
diff --git a/140_dbs/src/gplx/dbs/metas/Meta_fld_itm.java b/140_dbs/src/gplx/dbs/metas/Meta_fld_itm.java
new file mode 100644
index 000000000..e50b74101
--- /dev/null
+++ b/140_dbs/src/gplx/dbs/metas/Meta_fld_itm.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.dbs.metas; import gplx.*; import gplx.dbs.*;
+public class Meta_fld_itm {
+ public Meta_fld_itm(String name, Meta_type_itm type) {
+ this.name = name; this.type = type;
+ }
+ public String Name() {return name;} private final String name;
+ public Meta_type_itm Type() {return type;} private final Meta_type_itm type;
+ public int Nullable_tid() {return nullable_tid;} public void Nullable_tid_(int v) {nullable_tid = v;} private int nullable_tid;
+ public boolean Autonumber() {return autonumber;} public void Autonumber_y_() {autonumber = true;} private boolean autonumber;
+ public boolean Primary_key() {return primary_key;} public void Primary_key_y_() {primary_key = true;} private boolean primary_key;
+ public Object Default_val() {return default_val;} private Object default_val;
+ public void Default_val_(Object v) {this.default_val = v;}
+ public static final int Nullable_unknown = 0, Nullable_null = 1, Nullable_not_null = 2;
+}
diff --git a/140_dbs/src/gplx/dbs/metas/Meta_fld_mgr.java b/140_dbs/src/gplx/dbs/metas/Meta_fld_mgr.java
new file mode 100644
index 000000000..a5d61b93a
--- /dev/null
+++ b/140_dbs/src/gplx/dbs/metas/Meta_fld_mgr.java
@@ -0,0 +1,26 @@
+/*
+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.metas; import gplx.*; import gplx.dbs.*;
+public class Meta_fld_mgr {
+ private final Ordered_hash hash = Ordered_hash_.new_();
+ public int Len() {return hash.Count();}
+ public void Add(Meta_fld_itm itm) {hash.Add(itm.Name(), itm);}
+ public boolean Has(String name) {return hash.Has(name);}
+ public Meta_fld_itm Get_by(String name) {return (Meta_fld_itm)hash.Get_by(name);}
+ public Meta_fld_itm Get_at(int i) {return (Meta_fld_itm)hash.Get_at(i);}
+}
diff --git a/140_dbs/src/gplx/dbs/schemas/Schema_tbl_itm.java b/140_dbs/src/gplx/dbs/metas/Meta_idx_itm.java
similarity index 82%
rename from 140_dbs/src/gplx/dbs/schemas/Schema_tbl_itm.java
rename to 140_dbs/src/gplx/dbs/metas/Meta_idx_itm.java
index 7b16d18e5..ec355ff8b 100644
--- a/140_dbs/src/gplx/dbs/schemas/Schema_tbl_itm.java
+++ b/140_dbs/src/gplx/dbs/metas/Meta_idx_itm.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.dbs.schemas; import gplx.*; import gplx.dbs.*;
-public class Schema_tbl_itm {
- public Schema_tbl_itm(String name, String sql) {this.name = name; this.sql = sql;}
+package gplx.dbs.metas; import gplx.*; import gplx.dbs.*;
+public class Meta_idx_itm {
+ public Meta_idx_itm(String name, String sql) {this.name = name; this.sql = sql;}
public String Name() {return name;} private final String name;
public String Sql() {return sql;} private final String sql;
}
diff --git a/140_dbs/src/gplx/dbs/schemas/Schema_tbl_mgr.java b/140_dbs/src/gplx/dbs/metas/Meta_idx_mgr.java
similarity index 77%
rename from 140_dbs/src/gplx/dbs/schemas/Schema_tbl_mgr.java
rename to 140_dbs/src/gplx/dbs/metas/Meta_idx_mgr.java
index 76e4795d3..1a46fca2a 100644
--- a/140_dbs/src/gplx/dbs/schemas/Schema_tbl_mgr.java
+++ b/140_dbs/src/gplx/dbs/metas/Meta_idx_mgr.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.dbs.schemas; import gplx.*; import gplx.dbs.*;
-public class Schema_tbl_mgr {
+package gplx.dbs.metas; import gplx.*; import gplx.dbs.*;
+public class Meta_idx_mgr {
private final Ordered_hash hash = Ordered_hash_.new_();
- public void Add(Schema_tbl_itm itm) {hash.Add(itm.Name(), itm);}
+ public void Add(Meta_idx_itm itm) {hash.Add(itm.Name(), itm);}
public boolean Has(String name) {return hash.Has(name);}
- public Schema_tbl_itm Get(String name) {return (Schema_tbl_itm)hash.Get_by(name);}
+ public Meta_idx_itm Get(String name) {return (Meta_idx_itm)hash.Get_by(name);}
}
diff --git a/140_dbs/src/gplx/dbs/schemas/Schema_itm_tid.java b/140_dbs/src/gplx/dbs/metas/Meta_itm_tid.java
similarity index 91%
rename from 140_dbs/src/gplx/dbs/schemas/Schema_itm_tid.java
rename to 140_dbs/src/gplx/dbs/metas/Meta_itm_tid.java
index 20752bd07..bb290c3e9 100644
--- a/140_dbs/src/gplx/dbs/schemas/Schema_itm_tid.java
+++ b/140_dbs/src/gplx/dbs/metas/Meta_itm_tid.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.dbs.schemas; import gplx.*; import gplx.dbs.*;
-public class Schema_itm_tid {
+package gplx.dbs.metas; import gplx.*; import gplx.dbs.*;
+public class Meta_itm_tid {
public static final int Tid_unknown = 0, Tid_table = 1, Tid_index = 2;
public static final String Key_table = "table", Key_index = "index";
public static int Xto_int(String s) {
diff --git a/140_dbs/src/gplx/dbs/schemas/Schema_idx_itm.java b/140_dbs/src/gplx/dbs/metas/Meta_tbl_itm.java
similarity index 75%
rename from 140_dbs/src/gplx/dbs/schemas/Schema_idx_itm.java
rename to 140_dbs/src/gplx/dbs/metas/Meta_tbl_itm.java
index f08b3b230..6e67605a2 100644
--- a/140_dbs/src/gplx/dbs/schemas/Schema_idx_itm.java
+++ b/140_dbs/src/gplx/dbs/metas/Meta_tbl_itm.java
@@ -15,9 +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.schemas; import gplx.*; import gplx.dbs.*;
-public class Schema_idx_itm {
- public Schema_idx_itm(String name, String sql) {this.name = name; this.sql = sql;}
+package gplx.dbs.metas; import gplx.*; import gplx.dbs.*;
+public class Meta_tbl_itm {
+ public Meta_tbl_itm(String name, String sql) {this.name = name; this.sql = sql;}
+ public Meta_fld_mgr Flds() {return flds;} private final Meta_fld_mgr flds = new Meta_fld_mgr();
public String Name() {return name;} private final String name;
public String Sql() {return sql;} private final String sql;
}
diff --git a/140_dbs/src/gplx/dbs/schemas/Schema_idx_mgr.java b/140_dbs/src/gplx/dbs/metas/Meta_tbl_mgr.java
similarity index 77%
rename from 140_dbs/src/gplx/dbs/schemas/Schema_idx_mgr.java
rename to 140_dbs/src/gplx/dbs/metas/Meta_tbl_mgr.java
index f38e21bbd..b67502d66 100644
--- a/140_dbs/src/gplx/dbs/schemas/Schema_idx_mgr.java
+++ b/140_dbs/src/gplx/dbs/metas/Meta_tbl_mgr.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.dbs.schemas; import gplx.*; import gplx.dbs.*;
-public class Schema_idx_mgr {
+package gplx.dbs.metas; import gplx.*; import gplx.dbs.*;
+public class Meta_tbl_mgr {
private final Ordered_hash hash = Ordered_hash_.new_();
- public void Add(Schema_idx_itm itm) {hash.Add(itm.Name(), itm);}
+ public void Add(Meta_tbl_itm itm) {hash.Add(itm.Name(), itm);}
public boolean Has(String name) {return hash.Has(name);}
- public Schema_idx_itm Get(String name) {return (Schema_idx_itm)hash.Get_by(name);}
+ public Meta_tbl_itm Get_by(String name) {return (Meta_tbl_itm)hash.Get_by(name);}
}
diff --git a/140_dbs/src/gplx/dbs/metas/Meta_type_itm.java b/140_dbs/src/gplx/dbs/metas/Meta_type_itm.java
new file mode 100644
index 000000000..a99753d76
--- /dev/null
+++ b/140_dbs/src/gplx/dbs/metas/Meta_type_itm.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.dbs.metas; import gplx.*; import gplx.dbs.*;
+public class Meta_type_itm {
+ public Meta_type_itm(int tid_ansi, int tid_sqlite, byte[] name, int len_1, int len_2) {
+ this.tid_ansi = tid_ansi; this.tid_sqlite = tid_sqlite; this.name = name; this.len_1 = len_1; this.len_2 = len_2;
+ }
+ public int Tid_ansi() {return tid_ansi;} private final int tid_ansi;
+ public int Tid_sqlite() {return tid_sqlite;} private final int tid_sqlite;
+ public byte[] Name() {return name;} private final byte[] name;
+ public int Len_1() {return len_1;} private final int len_1;
+ public int Len_2() {return len_2;} private final int len_2;
+}
diff --git a/140_dbs/src/gplx/dbs/metas/parsers/Meta_fld_wkr__base.java b/140_dbs/src/gplx/dbs/metas/parsers/Meta_fld_wkr__base.java
new file mode 100644
index 000000000..f9205a8f0
--- /dev/null
+++ b/140_dbs/src/gplx/dbs/metas/parsers/Meta_fld_wkr__base.java
@@ -0,0 +1,117 @@
+/*
+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.metas.parsers; import gplx.*; import gplx.dbs.*; import gplx.dbs.metas.*;
+import gplx.core.brys.*; import gplx.core.btries.*;
+abstract class Meta_fld_wkr__base {
+ private byte[] hook;
+ private byte[][] words_ary; private int words_len;
+ @gplx.Virtual public int Tid() {return Tid_other;}
+ public void Ctor(byte[] hook, byte[]... words_ary) {
+ this.hook = hook;
+ this.words_ary = words_ary;
+ this.words_len = words_ary.length;
+ }
+ public void Reg(Btrie_slim_mgr trie) {
+ trie.Add_obj(hook, this);
+ }
+ @gplx.Virtual public void Match(Bry_rdr rdr, Meta_fld_itm fld) {
+ for (int i = 0; i < words_len; ++i) {
+ rdr.Skip_ws();
+ byte[] word = words_ary[i];
+ rdr.Chk_bry_or_fail(word);
+ }
+ When_match(fld);
+ }
+ protected abstract void When_match(Meta_fld_itm fld);
+ public static final int Tid_end_comma = 1, Tid_end_paren = 2, Tid_other = 3;
+}
+class Meta_fld_wkr__end_comma extends Meta_fld_wkr__base {
+ public Meta_fld_wkr__end_comma() {this.Ctor(Hook);}
+ @Override public int Tid() {return Tid_end_comma;}
+ @Override protected void When_match(Meta_fld_itm fld) {}
+ private static final byte[] Hook = Bry_.new_a7(",");
+ public static final Meta_fld_wkr__end_comma I = new Meta_fld_wkr__end_comma();
+}
+class Meta_fld_wkr__end_paren extends Meta_fld_wkr__base {
+ public Meta_fld_wkr__end_paren() {this.Ctor(Hook);}
+ @Override public int Tid() {return Tid_end_paren;}
+ @Override protected void When_match(Meta_fld_itm fld) {}
+ private static final byte[] Hook = Bry_.new_a7(")");
+ public static final Meta_fld_wkr__end_paren I = new Meta_fld_wkr__end_paren();
+}
+class Meta_fld_wkr__nullable_null extends Meta_fld_wkr__base {
+ public Meta_fld_wkr__nullable_null() {this.Ctor(Hook);}
+ @Override protected void When_match(Meta_fld_itm fld) {
+ fld.Nullable_tid_(Meta_fld_itm.Nullable_null);
+ }
+ private static final byte[] Hook = Bry_.new_a7("null");
+ public static final Meta_fld_wkr__nullable_null I = new Meta_fld_wkr__nullable_null();
+}
+class Meta_fld_wkr__nullable_not extends Meta_fld_wkr__base {
+ public Meta_fld_wkr__nullable_not() {this.Ctor(Hook, Bry_null);}
+ @Override protected void When_match(Meta_fld_itm fld) {
+ fld.Nullable_tid_(Meta_fld_itm.Nullable_not_null);
+ }
+ private static final byte[] Hook = Bry_.new_a7("not"), Bry_null = Bry_.new_a7("null");
+ public static final Meta_fld_wkr__nullable_not I = new Meta_fld_wkr__nullable_not();
+}
+class Meta_fld_wkr__primary_key extends Meta_fld_wkr__base {
+ public Meta_fld_wkr__primary_key() {this.Ctor(Hook, Bry_key);}
+ @Override protected void When_match(Meta_fld_itm fld) {
+ fld.Primary_key_y_();
+ }
+ private static final byte[] Hook = Bry_.new_a7("primary"), Bry_key = Bry_.new_a7("key");
+ public static final Meta_fld_wkr__primary_key I = new Meta_fld_wkr__primary_key();
+}
+class Meta_fld_wkr__autonumber extends Meta_fld_wkr__base {
+ public Meta_fld_wkr__autonumber() {this.Ctor(Hook);}
+ @Override protected void When_match(Meta_fld_itm fld) {
+ fld.Autonumber_y_();
+ }
+ private static final byte[] Hook = Bry_.new_a7("autoincrement");
+ public static final Meta_fld_wkr__autonumber I = new Meta_fld_wkr__autonumber();
+}
+class Meta_fld_wkr__default extends Meta_fld_wkr__base {
+ public Meta_fld_wkr__default() {this.Ctor(Hook);}
+ @Override public void Match(Bry_rdr rdr, Meta_fld_itm fld) {
+ Object default_val = null;
+ rdr.Skip_ws();
+ byte[] src = rdr.Src();
+ byte b = src[rdr.Pos()];
+ switch (b) {
+ case Byte_ascii.Quote:
+ case Byte_ascii.Apos:
+ int bgn_pos = rdr.Pos() + 1;
+ int end_pos = Bry_finder.Find_fwd(src, b, bgn_pos); if (end_pos == Bry_finder.Not_found) throw Err_.new_("unclosed quote; {0}", rdr.Mid_by_len_safe(40));
+ default_val = Bry_.Mid(src, bgn_pos, end_pos);
+ rdr.Pos_(end_pos + 1);
+ break;
+ case Byte_ascii.Dash:
+ case Byte_ascii.Num_0: case Byte_ascii.Num_1: case Byte_ascii.Num_2: case Byte_ascii.Num_3: case Byte_ascii.Num_4:
+ case Byte_ascii.Num_5: case Byte_ascii.Num_6: case Byte_ascii.Num_7: case Byte_ascii.Num_8: case Byte_ascii.Num_9:
+ default_val = rdr.Read_int_to_non_num();
+ break;
+ default:
+ throw Err_.new_("invalid field_default; {0}", rdr.Mid_by_len_safe(40));
+ }
+ fld.Default_val_(default_val);
+ }
+ @Override protected void When_match(Meta_fld_itm fld) {}
+ private static final byte[] Hook = Bry_.new_a7("default");
+ public static final Meta_fld_wkr__default I = new Meta_fld_wkr__default();
+}
diff --git a/140_dbs/src/gplx/dbs/metas/parsers/Meta_parser__fld.java b/140_dbs/src/gplx/dbs/metas/parsers/Meta_parser__fld.java
new file mode 100644
index 000000000..5b52c6f43
--- /dev/null
+++ b/140_dbs/src/gplx/dbs/metas/parsers/Meta_parser__fld.java
@@ -0,0 +1,118 @@
+/*
+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.metas.parsers; import gplx.*; import gplx.dbs.*; import gplx.dbs.metas.*;
+import gplx.core.brys.*; import gplx.core.btries.*;
+public class Meta_parser__fld {
+ public Meta_type_itm Parse_type(Bry_rdr rdr) {
+ rdr.Skip_ws();
+ Object type_obj = type_trie.Match_bgn(rdr.Src(), rdr.Pos(), rdr.Src_len());
+ if (type_obj == null) throw Err_.new_("invalid fld type; excerpt={0}", rdr.Mid_by_len_safe(40));
+ Meta_parser__fld_itm type_itm = (Meta_parser__fld_itm)type_obj;
+ rdr.Pos_add(type_itm.Word().length);
+ int paren_itms_count = type_itm.Paren_itms_count();
+ int len_1 = Int_.MinValue, len_2 = Int_.MinValue;
+ if (paren_itms_count > 0) {
+ rdr.Skip_ws().Chk_byte_or_fail(Byte_ascii.Paren_bgn);
+ len_1 = rdr.Skip_ws().Read_int_to_non_num(); if (len_1 == Int_.MinValue) throw Err_.new_("invalid fld len_1; excerpt={0}", rdr.Mid_by_len_safe(40));
+ if (paren_itms_count == 2) {
+ rdr.Skip_ws().Chk_byte_or_fail(Byte_ascii.Comma);
+ len_2 = rdr.Skip_ws().Read_int_to_non_num(); if (len_2 == Int_.MinValue) throw Err_.new_("invalid fld len_2; excerpt={0}", rdr.Mid_by_len_safe(40));
+ }
+ rdr.Skip_ws().Chk_byte_or_fail(Byte_ascii.Paren_end);
+ }
+ return new Meta_type_itm(type_itm.Tid_ansi(), type_itm.Tid_sqlite(), type_itm.Word(), len_1, len_2);
+ }
+ public Meta_fld_itm Parse_fld(Sql_bry_rdr rdr) { // starts after "(" or ","; EX: "(fld1 int", ", fld2 int"; ends at ")"
+ byte[] name = rdr.Read_sql_identifier();
+ Meta_type_itm type = this.Parse_type(rdr);
+ Meta_fld_itm fld = new Meta_fld_itm(String_.new_u8(name), type);
+ byte[] src = rdr.Src(); int src_len = rdr.Src_len();
+ while (true) {
+ rdr.Skip_ws();
+ if (rdr.Pos() == src_len) return fld; // eos
+ switch (src[rdr.Pos()]) {
+ case Byte_ascii.Comma: return fld;
+ case Byte_ascii.Paren_end: return fld;
+ }
+ Object type_obj = fld_trie.Match_bgn(src, rdr.Pos(), src_len); if (type_obj == null) throw Err_.new_("invalid; excerpt={0}", rdr.Mid_by_len_safe(40));
+ Meta_fld_wkr__base type_wkr = (Meta_fld_wkr__base)type_obj;
+ switch (type_wkr.Tid()) {
+ case Meta_fld_wkr__base.Tid_end_comma:
+ case Meta_fld_wkr__base.Tid_end_paren: return fld;
+ default:
+ rdr.Pos_(fld_trie.Match_pos());
+ type_wkr.Match(rdr, fld);
+ break;
+ }
+ }
+// return fld; // NOTE: will happen for tests; EX: "fld_1 int" vs "fld_1 int,"
+ }
+ private static final Btrie_slim_mgr fld_trie = fld_trie_init
+ ( Meta_fld_wkr__nullable_null.I
+ , Meta_fld_wkr__nullable_not.I
+ , Meta_fld_wkr__autonumber.I
+ , Meta_fld_wkr__primary_key.I
+ , Meta_fld_wkr__default.I
+ );
+ private static Btrie_slim_mgr fld_trie_init(Meta_fld_wkr__base... wkrs) {
+ Btrie_slim_mgr rv = Btrie_slim_mgr.ci_ascii_();
+ for (Meta_fld_wkr__base wkr : wkrs)
+ wkr.Reg(rv);
+ return rv;
+ }
+ private static final Btrie_slim_mgr type_trie = type_trie_init();
+ private static Btrie_slim_mgr type_trie_init() {
+ Btrie_slim_mgr rv = Btrie_slim_mgr.ci_ascii_();
+ Meta_parser__fld_itm.reg_many(rv, Db_meta_fld.Tid_byte , Sqlite_tid.Tid_int , 0, "tinyint", "int2");
+ Meta_parser__fld_itm.reg_many(rv, Db_meta_fld.Tid_short , Sqlite_tid.Tid_int , 0, "smallint");
+ Meta_parser__fld_itm.reg_many(rv, Db_meta_fld.Tid_int , Sqlite_tid.Tid_int , 0, "int", "integer", "mediumint");
+ Meta_parser__fld_itm.reg_many(rv, Db_meta_fld.Tid_long , Sqlite_tid.Tid_int , 0, "bigint", "int8"); // "UNSIGNED BIG INT"
+ Meta_parser__fld_itm.reg_many(rv, Db_meta_fld.Tid_str , Sqlite_tid.Tid_text , 1, "character", "varchar", "nchar"); // "varying character", "native character"
+ Meta_parser__fld_itm.reg_many(rv, Db_meta_fld.Tid_text , Sqlite_tid.Tid_text , 0, "text", "clob");
+ Meta_parser__fld_itm.reg_many(rv, Db_meta_fld.Tid_bry , Sqlite_tid.Tid_none , 0, "blob");
+ Meta_parser__fld_itm.reg_many(rv, Db_meta_fld.Tid_float , Sqlite_tid.Tid_real , 0, "float");
+ Meta_parser__fld_itm.reg_many(rv, Db_meta_fld.Tid_double , Sqlite_tid.Tid_real , 0, "real", "double"); // "double precision"
+ Meta_parser__fld_itm.reg_many(rv, Db_meta_fld.Tid_decimal , Sqlite_tid.Tid_numeric , 0, "numeric");
+ Meta_parser__fld_itm.reg_many(rv, Db_meta_fld.Tid_decimal , Sqlite_tid.Tid_numeric , 2, "decimal");
+ Meta_parser__fld_itm.reg_many(rv, Db_meta_fld.Tid_decimal , Sqlite_tid.Tid_numeric , 2, "decimal");
+ Meta_parser__fld_itm.reg_many(rv, Db_meta_fld.Tid_bool , Sqlite_tid.Tid_numeric , 0, "boolean", "bit"); // "bit" is not SQLITE
+ Meta_parser__fld_itm.reg_many(rv, Db_meta_fld.Tid_date , Sqlite_tid.Tid_numeric , 0, "date", "datetime");
+ return rv;
+ }
+}
+class Meta_parser__fld_itm {
+ public Meta_parser__fld_itm(int tid_ansi, int tid_sqlite, byte[] word, int paren_itms_count) {
+ this.tid_ansi = tid_ansi; this.tid_sqlite = tid_sqlite;
+ this.word = word; this.paren_itms_count = paren_itms_count;
+ }
+ public int Tid_ansi() {return tid_ansi;} private final int tid_ansi;
+ public int Tid_sqlite() {return tid_sqlite;} private final int tid_sqlite;
+ public byte[] Word() {return word;} private final byte[] word;
+ public int Paren_itms_count() {return paren_itms_count;} private final int paren_itms_count;
+ public static void reg_many(Btrie_slim_mgr trie, int tid_ansi, int tid_sqlite, int paren_itms_count, String... names_str) {
+ int len = names_str.length;
+ for (int i = 0; i < len; ++i) {
+ byte[] name_bry = Bry_.new_a7(names_str[i]);
+ Meta_parser__fld_itm itm = new Meta_parser__fld_itm(tid_ansi, tid_sqlite, name_bry, paren_itms_count);
+ trie.Add_obj(name_bry, itm);
+ }
+ }
+}
+class Sqlite_tid {
+ public static final int Tid_int = 1, Tid_text = 2, Tid_none = 3, Tid_real = 4, Tid_numeric = 5;
+}
diff --git a/140_dbs/src/gplx/dbs/metas/parsers/Meta_parser__fld_tst.java b/140_dbs/src/gplx/dbs/metas/parsers/Meta_parser__fld_tst.java
new file mode 100644
index 000000000..7b0a462a6
--- /dev/null
+++ b/140_dbs/src/gplx/dbs/metas/parsers/Meta_parser__fld_tst.java
@@ -0,0 +1,71 @@
+/*
+XOWA: the XOWA Offline Wiki Application
+Copyright (C) 2012 gnosygnu@gmail.com
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see .
+*/
+package gplx.dbs.metas.parsers; import gplx.*; import gplx.dbs.*; import gplx.dbs.metas.*;
+import org.junit.*;
+public class Meta_parser__fld_tst {
+ @Before public void init() {fxt.Clear();} private Meta_parser__fld_fxt fxt = new Meta_parser__fld_fxt();
+ @Test public void Parse_type() {
+ fxt.Test_parse_type("int" , fxt.Make_type(Db_meta_fld.Tid_int));
+ fxt.Test_parse_type("varchar(255)" , fxt.Make_type(Db_meta_fld.Tid_str, 255));
+ fxt.Test_parse_type("decimal(12,10)" , fxt.Make_type(Db_meta_fld.Tid_decimal, 12, 10));
+ fxt.Test_parse_type(" int" , fxt.Make_type(Db_meta_fld.Tid_int));
+ fxt.Test_parse_type(" decimal ( 12 , 10 )" , fxt.Make_type(Db_meta_fld.Tid_decimal, 12, 10));
+ }
+ @Test public void Parse_fld() {
+ fxt.Test_parse_fld("name_1 int" , fxt.Make_fld("name_1", Db_meta_fld.Tid_int, Meta_fld_itm.Nullable_unknown));
+ fxt.Test_parse_fld("name_1 int null" , fxt.Make_fld("name_1", Db_meta_fld.Tid_int, Meta_fld_itm.Nullable_null));
+ fxt.Test_parse_fld("name_1 int not null" , fxt.Make_fld("name_1", Db_meta_fld.Tid_int, Meta_fld_itm.Nullable_not_null));
+ fxt.Test_parse_fld("name_1 int not null autoincrement" , fxt.Make_fld("name_1", Db_meta_fld.Tid_int, Meta_fld_itm.Nullable_not_null, Bool_.N, Bool_.Y));
+ fxt.Test_parse_fld("name_1 int not null primary key" , fxt.Make_fld("name_1", Db_meta_fld.Tid_int, Meta_fld_itm.Nullable_not_null, Bool_.Y, Bool_.N));
+ fxt.Test_parse_fld("name_1 int not null default -1" , fxt.Make_fld("name_1", Db_meta_fld.Tid_int, Meta_fld_itm.Nullable_not_null, Bool_.Y, Bool_.N, -1));
+ fxt.Test_parse_fld("name_1 int not null default 'abc'" , fxt.Make_fld("name_1", Db_meta_fld.Tid_int, Meta_fld_itm.Nullable_not_null, Bool_.Y, Bool_.N, "abc"));
+ }
+}
+class Meta_parser__fld_fxt {
+ private final Meta_parser__fld fld_parser = new Meta_parser__fld();
+ private final Sql_bry_rdr rdr = new Sql_bry_rdr();
+ public void Clear() {}
+ public Meta_type_itm Make_type(int tid_ansi) {return new Meta_type_itm(tid_ansi, -1, null, Int_.MinValue, Int_.MinValue);}
+ public Meta_type_itm Make_type(int tid_ansi, int len_1) {return new Meta_type_itm(tid_ansi, -1, null, len_1, Int_.MinValue);}
+ public Meta_type_itm Make_type(int tid_ansi, int len_1, int len_2) {return new Meta_type_itm(tid_ansi, -1, null, len_1, len_2);}
+ public Meta_fld_itm Make_fld(String name, int tid_ansi, int nullable) {return Make_fld(name, tid_ansi, nullable, false, false, null);}
+ public Meta_fld_itm Make_fld(String name, int tid_ansi, int nullable, boolean autonumber, boolean primary_key) {return Make_fld(name, tid_ansi, nullable, false, false, null);}
+ public Meta_fld_itm Make_fld(String name, int tid_ansi, int nullable, boolean autonumber, boolean primary_key, Object default_val) {
+ Meta_fld_itm rv = new Meta_fld_itm(name, Make_type(tid_ansi));
+ rv.Nullable_tid_(nullable);
+ if (autonumber) rv.Autonumber_y_();
+ if (primary_key) rv.Primary_key_y_();
+ rv.Default_val_(default_val);
+ return rv;
+ }
+ public void Test_parse_type(String src, Meta_type_itm expd_type) {
+ rdr.Init(Bry_.new_u8(src));
+ Meta_type_itm actl_type = fld_parser.Parse_type(rdr);
+ Tfds.Eq(expd_type.Tid_ansi() , actl_type.Tid_ansi());
+ Tfds.Eq(expd_type.Len_1() , actl_type.Len_1());
+ Tfds.Eq(expd_type.Len_2() , actl_type.Len_2());
+ }
+ public void Test_parse_fld(String src, Meta_fld_itm expd_fld) {
+ rdr.Init(Bry_.new_u8(src));
+ Meta_fld_itm actl_fld = fld_parser.Parse_fld(rdr);
+ Tfds.Eq(expd_fld.Name() , actl_fld.Name());
+ Tfds.Eq(expd_fld.Type().Tid_ansi() , actl_fld.Type().Tid_ansi());
+ Tfds.Eq(expd_fld.Nullable_tid() , actl_fld.Nullable_tid());
+ Tfds.Eq(Object_.Xto_str_strict_or_empty(expd_fld.Default_val()), Object_.Xto_str_strict_or_empty(actl_fld.Default_val()));
+ }
+}
diff --git a/140_dbs/src/gplx/dbs/metas/parsers/Meta_parser__tbl.java b/140_dbs/src/gplx/dbs/metas/parsers/Meta_parser__tbl.java
new file mode 100644
index 000000000..d94cd4f65
--- /dev/null
+++ b/140_dbs/src/gplx/dbs/metas/parsers/Meta_parser__tbl.java
@@ -0,0 +1,57 @@
+/*
+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.metas.parsers; import gplx.*; import gplx.dbs.*; import gplx.dbs.metas.*;
+import gplx.core.brys.*; import gplx.core.btries.*;
+public class Meta_parser__tbl {
+ private final Sql_bry_rdr rdr = new Sql_bry_rdr();
+ private final Meta_parser__fld fld_parser = new Meta_parser__fld();
+ private Meta_tbl_itm tbl;
+ public Meta_tbl_itm Parse(byte[] src) {
+ src = Bry_.Lower_ascii(src);
+ rdr.Init(src);
+ tbl = null;
+ Parse_hdr();
+ Parse_flds();
+ return tbl;
+ }
+ private void Parse_hdr() {
+ rdr.Skip_ws().Chk_bry_or_fail(Tkn_create);
+ rdr.Skip_ws().Chk_bry_or_fail(Tkn_table);
+ byte[] tbl_name = rdr.Read_sql_identifier();
+ this.tbl = new Meta_tbl_itm(String_.new_u8(tbl_name), String_.new_u8(rdr.Src()));
+ rdr.Skip_ws().Chk_byte_or_fail(Byte_ascii.Paren_bgn);
+ }
+ private void Parse_flds() {
+ byte[] src = rdr.Src();
+ while (true) {
+ Meta_fld_itm fld = fld_parser.Parse_fld(rdr); if (fld == null) throw Err_.new_("unknown field; src={0}", rdr.Src());
+ tbl.Flds().Add(fld);
+ int pos = rdr.Pos();
+ byte b = pos == rdr.Src_len() ? Byte_ascii.Nil : src[pos];
+ switch (b) {
+ case Byte_ascii.Comma: rdr.Pos_add_one(); break;
+ case Byte_ascii.Paren_end: rdr.Pos_add_one(); return;
+ default: throw Err_.new_("premature end of flds; src={0}", rdr.Mid_by_len_safe(40));
+ }
+ }
+ }
+ private static final byte[]
+ Tkn_create = Bry_.new_a7("create")
+ , Tkn_table = Bry_.new_a7("table")
+ ;
+}
diff --git a/140_dbs/src/gplx/dbs/metas/parsers/Meta_parser__tbl_tst.java b/140_dbs/src/gplx/dbs/metas/parsers/Meta_parser__tbl_tst.java
new file mode 100644
index 000000000..4e263631a
--- /dev/null
+++ b/140_dbs/src/gplx/dbs/metas/parsers/Meta_parser__tbl_tst.java
@@ -0,0 +1,66 @@
+/*
+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.metas.parsers; import gplx.*; import gplx.dbs.*; import gplx.dbs.metas.*;
+import org.junit.*;
+public class Meta_parser__tbl_tst {
+ @Before public void init() {fxt.Clear();} private Meta_parser__tbl_fxt fxt = new Meta_parser__tbl_fxt();
+ @Test public void Test_parse() {
+ fxt.Test_parse("CREATE TABLE tbl_1 (fld_1 int, fld_2 int)", fxt.Make_tbl("tbl_1", "fld_1", "fld_2"));
+ }
+ @Test public void Test_smoke() {
+ fxt.Test_parse(String_.Concat_lines_nl_skip_last
+ ( "CREATE TABLE page"
+ , "( page_id integer NOT NULL PRIMARY KEY"
+ , ", page_namespace integer NOT NULL"
+ , ", page_title varchar(255) NOT NULL"
+ , ", page_is_redirect integer NOT NULL"
+ , ", page_touched varchar(14) NOT NULL"
+ , ", page_len integer NOT NULL"
+ , ", page_random_int integer NOT NULL"
+ , ", page_text_db_id integer NOT NULL"
+ , ", page_html_db_id integer NOT NULL DEFAULT -1"
+ , ", page_redirect_id integer NOT NULL DEFAULT -1"
+ , ");"
+ ), fxt.Make_tbl("page", "page_id", "page_namespace", "page_title", "page_is_redirect", "page_touched", "page_len", "page_random_int", "page_text_db_id", "page_html_db_id", "page_redirect_id"));
+ }
+}
+class Meta_parser__tbl_fxt {
+ private final Meta_parser__tbl tbl_parser = new Meta_parser__tbl();
+ public void Clear() {}
+ public Meta_tbl_itm Make_tbl(String tbl_name, String... fld_names) {
+ Meta_tbl_itm rv = new Meta_tbl_itm(tbl_name, "NONE");
+ int len = fld_names.length;
+ for (int i = 0; i < len; ++i) {
+ rv.Flds().Add(new Meta_fld_itm(fld_names[i], new Meta_type_itm(Db_meta_fld.Tid_int, Sqlite_tid.Tid_int, Bry_.new_a7("int"), Int_.MinValue, Int_.MinValue)));
+ }
+ return rv;
+ }
+ public void Test_parse(String src, Meta_tbl_itm expd_tbl) {
+ Meta_tbl_itm actl_tbl = tbl_parser.Parse(Bry_.new_u8(src));
+ Tfds.Eq(expd_tbl.Name(), actl_tbl.Name());
+ Tfds.Eq_ary_str(To_str_ary(expd_tbl.Flds()), To_str_ary(actl_tbl.Flds()));
+ }
+ private static String[] To_str_ary(Meta_fld_mgr fld_mgr) {
+ int len = fld_mgr.Len();
+ String[] rv = new String[len];
+ for (int i = 0; i < len; ++i) {
+ rv[i] = fld_mgr.Get_at(i).Name();
+ }
+ return rv;
+ }
+}
diff --git a/140_dbs/src/gplx/dbs/metas/parsers/Sql_bry_rdr.java b/140_dbs/src/gplx/dbs/metas/parsers/Sql_bry_rdr.java
new file mode 100644
index 000000000..f8d4ddaee
--- /dev/null
+++ b/140_dbs/src/gplx/dbs/metas/parsers/Sql_bry_rdr.java
@@ -0,0 +1,57 @@
+/*
+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.metas.parsers; import gplx.*; import gplx.dbs.*; import gplx.dbs.metas.*;
+import gplx.core.brys.*;
+public class Sql_bry_rdr extends Bry_rdr { public byte[] Read_sql_identifier() {
+ this.Skip_ws();
+ int bgn = pos, end = -1;
+ if (pos == src_len) return null;
+ if (src[pos] == Byte_ascii.Brack_bgn) { // EX: [name with space]
+ bgn = ++pos; // set bgn after [
+ end = this.Find_fwd(Byte_ascii.Brack_end);
+ pos = end + 1; // set pos after ]
+ }
+ else {
+ this.Skip_alpha_num_under(); // ASSUME: identifier is ASCII and alpha / num / underscore
+ if (pos == bgn) return null; // String is not identifier; EX: "!@#"
+ end = pos;
+ }
+ return Bry_.Mid(src, bgn, end);
+ }
+ @Override public Bry_rdr Skip_ws() {
+ byte b_0 = pos < src_len ? src[pos] : Byte_ascii.Nil;
+ byte bgn_1 = Byte_ascii.Nil;
+ byte[] end_bry = null;
+ switch (b_0) {
+ case Byte_ascii.Dash: bgn_1 = Byte_ascii.Dash; end_bry = Comm_end_line; break;
+ case Byte_ascii.Slash: bgn_1 = Byte_ascii.Asterisk; end_bry = Comm_end_multi; break;
+ case Byte_ascii.Tab: case Byte_ascii.NewLine: case Byte_ascii.CarriageReturn: case Byte_ascii.Space:
+ ++pos;
+ return super.Skip_ws();
+ default:
+ return this;
+ }
+ byte b_1 = pos + 1 < src_len ? src[pos + 1] : Byte_ascii.Nil;
+ if (b_1 != bgn_1) return this;
+ int end_pos = Bry_finder.Find_fwd(src, end_bry, pos + 2, src_len);
+ if (end_pos == Bry_finder.Not_found) return this;
+ pos = end_pos + end_bry.length;
+ return this.Skip_ws();
+ }
+ private static final byte[] Comm_end_line = Byte_ascii.NewLine_bry, Comm_end_multi = Bry_.new_a7("*/");
+}
diff --git a/140_dbs/src/gplx/dbs/metas/parsers/Sql_bry_rdr_tst.java b/140_dbs/src/gplx/dbs/metas/parsers/Sql_bry_rdr_tst.java
new file mode 100644
index 000000000..3d6c41d36
--- /dev/null
+++ b/140_dbs/src/gplx/dbs/metas/parsers/Sql_bry_rdr_tst.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.dbs.metas.parsers; import gplx.*; import gplx.dbs.*; import gplx.dbs.metas.*;
+import org.junit.*;
+public class Sql_bry_rdr_tst {
+ @Before public void init() {fxt.Clear();} private Sql_bry_rdr_fxt fxt = new Sql_bry_rdr_fxt();
+ @Test public void Skip_ws() {
+ fxt.Test_skip_ws("a", 0); // char
+ fxt.Test_skip_ws("\ta", 1); // tab
+ fxt.Test_skip_ws("\na", 1); // \n
+ fxt.Test_skip_ws("\ra", 1); // \r
+ fxt.Test_skip_ws(" a", 1); // space
+ fxt.Test_skip_ws("\t\n\r a", 4); // multi
+ fxt.Test_skip_ws("", 0); // eos
+ }
+ @Test public void Read_sql_identifier() {
+ fxt.Test_read_sql_identifier("a", "a"); // one
+ fxt.Test_read_sql_identifier("abc_1", "abc_1"); // many
+ fxt.Test_read_sql_identifier("[abc_1]", "abc_1"); // bracket
+ fxt.Test_read_sql_identifier(" a ", "a"); // ws
+ fxt.Test_read_sql_identifier("", null); // eos
+ fxt.Test_read_sql_identifier("!@#", null); // sym
+ }
+}
+class Sql_bry_rdr_fxt {
+ private final Sql_bry_rdr rdr = new Sql_bry_rdr();
+ public void Clear() {}
+ public void Test_skip_ws(String src, int expd_pos) {
+ rdr.Init(Bry_.new_u8(src));
+ rdr.Skip_ws();
+ Tfds.Eq(expd_pos, rdr.Pos());
+ }
+ public void Test_read_sql_identifier(String src, String expd) {
+ rdr.Init(Bry_.new_u8(src));
+ Tfds.Eq(expd, String_.new_u8(rdr.Read_sql_identifier()));
+ }
+}
diff --git a/150_gfui/src_200_ipt/gplx/gfui/IptArgChainMgr_tst.java b/150_gfui/src_200_ipt/gplx/gfui/IptArgChainMgr_tst.java
index 689e25e42..e2f508fe1 100644
--- a/150_gfui/src_200_ipt/gplx/gfui/IptArgChainMgr_tst.java
+++ b/150_gfui/src_200_ipt/gplx/gfui/IptArgChainMgr_tst.java
@@ -50,7 +50,7 @@ public class IptArgChainMgr_tst {
}
else if (expd == 1) {
Tfds.Eq(process, "", "1:{0} should be empty:process", literal);
- Tfds.Eq_true(String_.HasAtEnd(activeKey, key.Key() + ","), "1:{0} should set key:activeKey,{1}", literal, activeKey);
+ Tfds.Eq_true(String_.Has_at_end(activeKey, key.Key() + ","), "1:{0} should set key:activeKey,{1}", literal, activeKey);
}
else if (expd == 2) {
Tfds.Eq_true(String_.EqNot(process, ""), "2:{0} should not be empty;process,{1}", literal, process);
diff --git a/150_gfui/src_200_ipt/gplx/gfui/IptKey_.java b/150_gfui/src_200_ipt/gplx/gfui/IptKey_.java
index 18c4affa9..e392a7bfe 100644
--- a/150_gfui/src_200_ipt/gplx/gfui/IptKey_.java
+++ b/150_gfui/src_200_ipt/gplx/gfui/IptKey_.java
@@ -63,7 +63,7 @@ public class IptKey_ {
return (rv == null) ? new_(val, enm_mgr.GetStr(val)) : rv;
}
static IptKey new_(int val, String name) {
- IptKey rv = new IptKey(val, String_.HasAtBgn(name, "key.") ? name : "key." + name);
+ IptKey rv = new IptKey(val, String_.Has_at_bgn(name, "key.") ? name : "key." + name);
enm_mgr.RegObj(val, name, rv);
return rv;
}
diff --git a/150_gfui/src_400_win/gplx/gfui/GfoConsoleWin.java b/150_gfui/src_400_win/gplx/gfui/GfoConsoleWin.java
index 9def1083a..dcdb4a767 100644
--- a/150_gfui/src_400_win/gplx/gfui/GfoConsoleWin.java
+++ b/150_gfui/src_400_win/gplx/gfui/GfoConsoleWin.java
@@ -96,7 +96,7 @@ class GfoConsoleWinCmds implements GfoInvkAble {
GfsCore._.ExecRegy("gplx.gfui.GfoConsoleWin.ini");
}
public void Results_add(String s) {
- if (!String_.HasAtEnd(s, GfuiTextBox_.NewLine))
+ if (!String_.Has_at_end(s, GfuiTextBox_.NewLine))
s += GfuiTextBox_.NewLine;
statusBox.Text_(statusBox.Text() + s);
statusBox.SelBgn_set(String_.Len(statusBox.Text()) - 1);
diff --git a/150_gfui/xtn/gplx/gfui/Swt_html.java b/150_gfui/xtn/gplx/gfui/Swt_html.java
index 78085a57c..2073f68dc 100644
--- a/150_gfui/xtn/gplx/gfui/Swt_html.java
+++ b/150_gfui/xtn/gplx/gfui/Swt_html.java
@@ -236,12 +236,12 @@ class Swt_html_lnr_location implements LocationListener {
String location = arg.location;
if (String_.Eq(location, "about:blank")) return; // location changing event fires once when page is loaded; ignore
if ( html_box.Browser_tid() == Swt_html.Browser_tid_webkit // webkit prefixes "about:blank" to anchors; causes TOC to fail when clicking on links; EX:about:blank#TOC1; DATE:2015-06-09
- && String_.HasAtBgn(location, "about:blank")) {
+ && String_.Has_at_bgn(location, "about:blank")) {
location = String_.Mid(location, 11); // 11 = "about:blank".length
}
if ( html_box.Html_doc_html_load_tid() == Gxw_html_load_tid_.Tid_url // navigating to file://page.html will fire location event; ignore if url mode
- && String_.HasAtBgn(location, "file:")
- && String_.HasAtEnd(location, ".html")
+ && String_.Has_at_bgn(location, "file:")
+ && String_.Has_at_end(location, ".html")
)
return;
try {
diff --git a/400_xowa/src/gplx/core/brys/Bry_rdr_tst.java b/400_xowa/src/gplx/core/brys/Bry_rdr_tst.java
index 1fad2a5bb..f1260f804 100644
--- a/400_xowa/src/gplx/core/brys/Bry_rdr_tst.java
+++ b/400_xowa/src/gplx/core/brys/Bry_rdr_tst.java
@@ -43,7 +43,7 @@ public class Bry_rdr_tst {
class Bry_rdr_fxt {
private Bry_rdr rdr;
public void Clear() {rdr = new Bry_rdr();}
- public Bry_rdr_fxt Init_src(String v) {rdr.Src_(Bry_.new_u8(v)); return this;}
+ public Bry_rdr_fxt Init_src(String v) {rdr.Init(Bry_.new_u8(v)); return this;}
public Bry_rdr_fxt Init_pos(int v) {rdr.Pos_(v); return this;}
public void Test_read_int(int expd_val) {
Tfds.Eq(expd_val, rdr.Read_int_to_pipe());
diff --git a/400_xowa/src/gplx/core/threads/Gfo_thread_cmd_unzip.java b/400_xowa/src/gplx/core/threads/Gfo_thread_cmd_unzip.java
index 9369abaab..230747e7c 100644
--- a/400_xowa/src/gplx/core/threads/Gfo_thread_cmd_unzip.java
+++ b/400_xowa/src/gplx/core/threads/Gfo_thread_cmd_unzip.java
@@ -66,7 +66,7 @@ public class Gfo_thread_cmd_unzip implements Gfo_thread_cmd {
Io_url zip_dir = Io_url_.Empty;
for (int i = 0; i < dirs_len; i++) {
Io_url dir = dirs[i];
- if (String_.HasAtBgn(String_.Lower(dir.NameOnly()), String_.Lower(trg.NameOnly()))) { // HACK: check that directory starts with archive name; DATE:2013-12-22
+ if (String_.Has_at_bgn(String_.Lower(dir.NameOnly()), String_.Lower(trg.NameOnly()))) { // HACK: check that directory starts with archive name; DATE:2013-12-22
zip_dir = dir;
break;
}
diff --git a/400_xowa/src/gplx/dbs/schemas/Schema_db_mgr.java b/400_xowa/src/gplx/dbs/metas/Schema_db_mgr.java
similarity index 83%
rename from 400_xowa/src/gplx/dbs/schemas/Schema_db_mgr.java
rename to 400_xowa/src/gplx/dbs/metas/Schema_db_mgr.java
index 2a37c2a7d..e89867805 100644
--- a/400_xowa/src/gplx/dbs/schemas/Schema_db_mgr.java
+++ b/400_xowa/src/gplx/dbs/metas/Schema_db_mgr.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.dbs.schemas; import gplx.*; import gplx.dbs.*;
-import gplx.dbs.schemas.updates.*;
+package gplx.dbs.metas; import gplx.*; import gplx.dbs.*;
+import gplx.dbs.metas.updates.*;
public class Schema_db_mgr {
public Schema_loader_mgr Loader() {return loader;} public void Loader_(Schema_loader_mgr v) {loader = v;} private Schema_loader_mgr loader;
public Schema_update_mgr Updater() {return updater;} private final Schema_update_mgr updater = new Schema_update_mgr();
- public Schema_tbl_mgr Tbl_mgr() {return tbl_mgr;} private final Schema_tbl_mgr tbl_mgr = new Schema_tbl_mgr();
+ public Meta_tbl_mgr Tbl_mgr() {return tbl_mgr;} private final Meta_tbl_mgr tbl_mgr = new Meta_tbl_mgr();
public void Init(Db_conn conn) {
loader.Load(this, conn);
updater.Update(this, conn);
diff --git a/400_xowa/src/gplx/dbs/schemas/Schema_loader_mgr.java b/400_xowa/src/gplx/dbs/metas/Schema_loader_mgr.java
similarity index 92%
rename from 400_xowa/src/gplx/dbs/schemas/Schema_loader_mgr.java
rename to 400_xowa/src/gplx/dbs/metas/Schema_loader_mgr.java
index dbca1e5d4..5f811dfe7 100644
--- a/400_xowa/src/gplx/dbs/schemas/Schema_loader_mgr.java
+++ b/400_xowa/src/gplx/dbs/metas/Schema_loader_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.dbs.schemas; import gplx.*; import gplx.dbs.*;
+package gplx.dbs.metas; import gplx.*; import gplx.dbs.*;
public interface Schema_loader_mgr {
void Load(Schema_db_mgr db_mgr, Db_conn conn);
}
diff --git a/400_xowa/src/gplx/dbs/schemas/Schema_loader_mgr_.java b/400_xowa/src/gplx/dbs/metas/Schema_loader_mgr_.java
similarity index 75%
rename from 400_xowa/src/gplx/dbs/schemas/Schema_loader_mgr_.java
rename to 400_xowa/src/gplx/dbs/metas/Schema_loader_mgr_.java
index ef310fee1..306ece9a1 100644
--- a/400_xowa/src/gplx/dbs/schemas/Schema_loader_mgr_.java
+++ b/400_xowa/src/gplx/dbs/metas/Schema_loader_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.dbs.schemas; import gplx.*; import gplx.dbs.*;
+package gplx.dbs.metas; 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();
@@ -27,19 +27,22 @@ class Schema_loader_mgr__null implements Schema_loader_mgr {
class Schema_loader_mgr__sqlite implements Schema_loader_mgr {
public void Load(Schema_db_mgr db_mgr, Db_conn conn) {
Gfo_usr_dlg_.I.Log_many("", "", "db.schema.load.bgn: conn=~{0}", conn.Conn_info().Xto_api());
- Schema_tbl_mgr tbl_mgr = db_mgr.Tbl_mgr();
+ Meta_tbl_mgr tbl_mgr = db_mgr.Tbl_mgr();
Db_qry__select_in_tbl qry = Db_qry__select_in_tbl.new_("sqlite_master", String_.Ary_empty, String_.Ary("type", "name", "sql"), Db_qry__select_in_tbl.Order_by_null);
Db_rdr rdr = conn.Stmt_new(qry).Exec_select__rls_auto();
try {
while (rdr.Move_next()) {
- 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));
+ String type_str = rdr.Read_str("type");
+ String name = rdr.Read_str("name");
+ String sql = rdr.Read_str("sql");
+ int type_int = Meta_itm_tid.Xto_int(type_str);
+ switch (type_int) {
+ case Meta_itm_tid.Tid_table:
+ Meta_tbl_itm tbl_itm = new Meta_tbl_itm(name, sql);
tbl_mgr.Add(tbl_itm);
break;
- case Schema_itm_tid.Tid_index: break; // noop for now
- default: throw Err_.unhandled(type);
+ case Meta_itm_tid.Tid_index: break; // noop for now
+ default: throw Err_.unhandled(type_str);
}
}
} finally {rdr.Rls();}
diff --git a/400_xowa/src/gplx/dbs/schemas/updates/Schema_update_cmd.java b/400_xowa/src/gplx/dbs/metas/updates/Schema_update_cmd.java
similarity index 89%
rename from 400_xowa/src/gplx/dbs/schemas/updates/Schema_update_cmd.java
rename to 400_xowa/src/gplx/dbs/metas/updates/Schema_update_cmd.java
index 47c16d8af..6c8e2bdad 100644
--- a/400_xowa/src/gplx/dbs/schemas/updates/Schema_update_cmd.java
+++ b/400_xowa/src/gplx/dbs/metas/updates/Schema_update_cmd.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.dbs.schemas.updates; import gplx.*; import gplx.dbs.*; import gplx.dbs.schemas.*;
+package gplx.dbs.metas.updates; import gplx.*; import gplx.dbs.*; import gplx.dbs.metas.*;
public interface Schema_update_cmd {
String Name();
boolean Exec_is_done();
diff --git a/400_xowa/src/gplx/dbs/schemas/updates/Schema_update_cmd_.java b/400_xowa/src/gplx/dbs/metas/updates/Schema_update_cmd_.java
similarity index 93%
rename from 400_xowa/src/gplx/dbs/schemas/updates/Schema_update_cmd_.java
rename to 400_xowa/src/gplx/dbs/metas/updates/Schema_update_cmd_.java
index f9d85ec4e..820bff0bc 100644
--- a/400_xowa/src/gplx/dbs/schemas/updates/Schema_update_cmd_.java
+++ b/400_xowa/src/gplx/dbs/metas/updates/Schema_update_cmd_.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.dbs.schemas.updates; import gplx.*; import gplx.dbs.*; import gplx.dbs.schemas.*;
+package gplx.dbs.metas.updates; import gplx.*; import gplx.dbs.*; import gplx.dbs.metas.*;
import gplx.dbs.engines.sqlite.*;
public class Schema_update_cmd_ {
public static Schema_update_cmd Make_tbl_create(String tbl_name, String tbl_sql, Db_idx_itm... tbl_idxs) {return new Schema_update_cmd__tbl_create(tbl_name, tbl_sql, tbl_idxs);}
diff --git a/400_xowa/src/gplx/dbs/schemas/updates/Schema_update_mgr.java b/400_xowa/src/gplx/dbs/metas/updates/Schema_update_mgr.java
similarity index 91%
rename from 400_xowa/src/gplx/dbs/schemas/updates/Schema_update_mgr.java
rename to 400_xowa/src/gplx/dbs/metas/updates/Schema_update_mgr.java
index cbbd8b7e7..4598313d3 100644
--- a/400_xowa/src/gplx/dbs/schemas/updates/Schema_update_mgr.java
+++ b/400_xowa/src/gplx/dbs/metas/updates/Schema_update_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.dbs.schemas.updates; import gplx.*; import gplx.dbs.*; import gplx.dbs.schemas.*;
+package gplx.dbs.metas.updates; import gplx.*; import gplx.dbs.*; import gplx.dbs.metas.*;
public class Schema_update_mgr {
private List_adp cmds = List_adp_.new_();
public void Add(Schema_update_cmd cmd) {cmds.Add(cmd);}
diff --git a/400_xowa/src/gplx/dbs/schemas/updates/Schema_update_mgr_tst.java b/400_xowa/src/gplx/dbs/metas/updates/Schema_update_mgr_tst.java
similarity index 88%
rename from 400_xowa/src/gplx/dbs/schemas/updates/Schema_update_mgr_tst.java
rename to 400_xowa/src/gplx/dbs/metas/updates/Schema_update_mgr_tst.java
index c5574a051..ce699a577 100644
--- a/400_xowa/src/gplx/dbs/schemas/updates/Schema_update_mgr_tst.java
+++ b/400_xowa/src/gplx/dbs/metas/updates/Schema_update_mgr_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.dbs.schemas.updates; import gplx.*; import gplx.dbs.*; import gplx.dbs.schemas.*;
+package gplx.dbs.metas.updates; import gplx.*; import gplx.dbs.*; import gplx.dbs.metas.*;
import org.junit.*; import gplx.dbs.*;
public class Schema_update_mgr_tst {
@Before public void init() {fxt.Clear();} private Schema_update_mgr_fxt fxt = new Schema_update_mgr_fxt();
@@ -23,7 +23,7 @@ public class Schema_update_mgr_tst {
fxt.Test_exec_y(new Schema_update_cmd__mock());
}
@Test public void Delete() {
- fxt.Init_itm(Schema_itm_tid.Tid_table, Schema_update_cmd__mock.Tbl_name);
+ fxt.Init_itm(Meta_itm_tid.Tid_table, Schema_update_cmd__mock.Tbl_name);
fxt.Test_exec_n(new Schema_update_cmd__mock());
}
}
@@ -34,7 +34,7 @@ class Schema_update_mgr_fxt {
db_mgr = new Schema_db_mgr();
}
public void Init_itm(int tid, String name) {
- db_mgr.Tbl_mgr().Add(new Schema_tbl_itm(name, "sql"));
+ db_mgr.Tbl_mgr().Add(new Meta_tbl_itm(name, "sql"));
}
public void Test_exec_y(Schema_update_cmd cmd) {Test_exec(cmd, Bool_.Y);}
public void Test_exec_n(Schema_update_cmd cmd) {Test_exec(cmd, Bool_.N);}
diff --git a/400_xowa/src/gplx/fsdb/Fsdb_db_mgr__v1.java b/400_xowa/src/gplx/fsdb/Fsdb_db_mgr__v1.java
index 1774e3b00..1bb522fd0 100644
--- a/400_xowa/src/gplx/fsdb/Fsdb_db_mgr__v1.java
+++ b/400_xowa/src/gplx/fsdb/Fsdb_db_mgr__v1.java
@@ -46,7 +46,13 @@ public class Fsdb_db_mgr__v1 implements Fsdb_db_mgr {
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 Fsdb_db_file File__bin_file__new(int mnt_id, String file_name) {
+ 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, file_name); // EX: /xowa/enwiki/fsdb.main/fsdb.bin.0000.sqlite3
+ Db_conn conn = Db_conn_bldr.I.New(url);
+ Fsd_bin_tbl bin_tbl = new Fsd_bin_tbl(conn, Bool_.Y); bin_tbl.Create_tbl();
+ return new Fsdb_db_file(url, conn);
+ }
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 get_db(Io_url file) {
Db_conn conn = Db_conn_bldr.I.Get(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
index 95964ec51..565de958b 100644
--- a/400_xowa/src/gplx/fsdb/Fsdb_db_mgr__v2_bldr.java
+++ b/400_xowa/src/gplx/fsdb/Fsdb_db_mgr__v2_bldr.java
@@ -20,7 +20,7 @@ import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.fsdb.meta.*; import gplx.
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 Get_or_make(Xow_wiki wiki, boolean delete_if_exists) { // NOTE: must check if file exists else imports with existing v2 dbs will fail; DATE:2015-05-23
- Xowd_db_layout layout = wiki.Data_mgr__core_mgr().Props().Layout_file();
+ Xowd_db_layout layout = wiki.Data__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);
@@ -99,7 +99,7 @@ public class Fsdb_db_mgr__v2_bldr {
}
public static void Make_cfg_data(Xow_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();
+ Xowd_db_file core_db = wiki.Data__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_.new_(), 2, file_core_name, file.Url().NameAndExt());
info_file.Save(cfg_tbl);
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 0b98826f4..e2b33c95f 100644
--- a/400_xowa/src/gplx/fsdb/data/Fsd_bin_tbl.java
+++ b/400_xowa/src/gplx/fsdb/data/Fsd_bin_tbl.java
@@ -68,7 +68,13 @@ public class Fsd_bin_tbl implements RlsAble {
Db_rdr rdr = stmt_select.Clear().Crt_int(fld_owner_id, owner_id).Exec_select__rls_manual();
try {
if (rdr.Move_next()) {
- byte[] rv = rdr.Read_bry(fld_data);
+ byte[] rv = null;
+ try {rv = rdr.Read_bry(fld_data);}
+ catch (Exception e) {
+ if (Op_sys.Cur().Tid_is_drd() && String_.Has(Err_.Message_lang(e), "get field slot from row")) { // get field slot from row 0 col 0 failed
+ rv = rdr.Read_bry_in_parts(tbl_name, fld_data, fld_owner_id, owner_id);
+ }
+ }
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
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 04ccb5fb1..a2b6a2990 100644
--- a/400_xowa/src/gplx/fsdb/meta/Fsm_bin_fil.java
+++ b/400_xowa/src/gplx/fsdb/meta/Fsm_bin_fil.java
@@ -20,13 +20,14 @@ import gplx.ios.*; import gplx.dbs.*;
import gplx.fsdb.data.*;
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;
+ public Fsm_bin_fil(boolean schema_is_1, int id, Io_url url, String url_rel, Db_conn conn, long bin_len) {
+ this.id = id; this.url = url; this.url_rel = url_rel; this.conn = conn; this.bin_len = bin_len;
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 Io_url url;
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 long Bin_len() {return bin_len;} public 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);}
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 f84ba2219..c6bd91b34 100644
--- a/400_xowa/src/gplx/fsdb/meta/Fsm_bin_mgr.java
+++ b/400_xowa/src/gplx/fsdb/meta/Fsm_bin_mgr.java
@@ -29,11 +29,12 @@ public class Fsm_bin_mgr {
this.dbs__ary_len = dbs__ary.length;
if (dbs__ary_len > 0) this.nth_db = dbs__ary[dbs__ary_len - 1];
}
+ public int Dbs__len() {return dbs__ary_len;}
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());
+ Fsm_bin_fil rv = new Fsm_bin_fil(core_mgr.File__schema_is_1(), dbs__ary_len, db.Url(), db.Url().NameAndExt(), db.Conn(), Fsm_bin_fil.Bin_len_null);
tbl.Insert(rv.Id(), rv.Url_rel());
Dbs__add(rv);
return rv;
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 4a9b8fa1b..1f1b0496c 100644
--- a/400_xowa/src/gplx/fsdb/meta/Fsm_bin_tbl.java
+++ b/400_xowa/src/gplx/fsdb/meta/Fsm_bin_tbl.java
@@ -19,19 +19,27 @@ package gplx.fsdb.meta; import gplx.*; import gplx.fsdb.*;
import gplx.dbs.*; import gplx.dbs.qrys.*;
public class Fsm_bin_tbl {
private final String tbl_name; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
- private final String fld_uid, fld_url;
+ private final String fld_uid, fld_url, fld_bin_len, fld_bin_max;
private final Db_conn conn; private int mnt_id;
public Fsm_bin_tbl(Db_conn conn, boolean schema_is_1, int mnt_id) {
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_";}
+ 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);
+ if (schema_is_1) {
+ fld_bin_len = flds.Add_long("bin_len");
+ fld_bin_max = flds.Add_long("bin_max");
+ }
+ else {
+ fld_bin_len = Db_meta_fld.Key_null;
+ fld_bin_max = Db_meta_fld.Key_null;
+ }
}
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();
+ conn.Stmt_insert(tbl_name, flds).Crt_int(fld_uid, id).Val_str(fld_url, url_rel).Val_long(fld_bin_len, 0).Val_long(fld_bin_max, 0).Exec_insert();
}
public Fsm_bin_fil[] Select_all(Fsdb_db_mgr db_conn_mgr) {
List_adp rv = List_adp_.new_();
@@ -41,7 +49,7 @@ public class Fsm_bin_tbl {
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());
+ Fsm_bin_fil itm = new Fsm_bin_fil(db_conn_mgr.File__schema_is_1(), bin_id, bin_db.Url(), bin_url, bin_db.Conn(), Fsm_bin_fil.Bin_len_null);
rv.Add(itm);
}
} finally {rdr.Rls();}
diff --git a/400_xowa/src/gplx/gfs/Gfs_parser_tst.java b/400_xowa/src/gplx/gfs/Gfs_parser_tst.java
index 19a9e5834..0cfab6ac2 100644
--- a/400_xowa/src/gplx/gfs/Gfs_parser_tst.java
+++ b/400_xowa/src/gplx/gfs/Gfs_parser_tst.java
@@ -147,7 +147,7 @@ class Gfs_parser_fxt {
catch (Exception e) {
String actl_err = Err_.Message_gplx_brief(e);
actl_err = String_.GetStrBefore(actl_err, ":");
- boolean match = String_.HasAtBgn(actl_err, expd_err);
+ boolean match = String_.Has_at_bgn(actl_err, expd_err);
if (!match) Tfds.Fail("expecting '" + expd_err + "' got '" + actl_err + "'");
return;
}
diff --git a/400_xowa/src/gplx/xowa/Xoa_app_.java b/400_xowa/src/gplx/xowa/Xoa_app_.java
index 87315b65e..28f87f7a7 100644
--- a/400_xowa/src/gplx/xowa/Xoa_app_.java
+++ b/400_xowa/src/gplx/xowa/Xoa_app_.java
@@ -26,7 +26,7 @@ public class Xoa_app_ {
boot_mgr.Run(args);
}
public static final String Name = "xowa";
- public static final String Version = "2.6.3.1";
+ public static final String Version = "2.6.4.1";
public static String Build_date = "2012-12-30 00:00:00";
public static String Op_sys;
public static String User_agent = "";
diff --git a/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_url.java b/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_url.java
index f2defd7b9..e0aef16e0 100644
--- a/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_url.java
+++ b/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_url.java
@@ -42,7 +42,7 @@ public class Xoapi_url implements GfoInvkAble {
else {
for (int i = 0; i < urls_len; i++) {
String url = urls[i];
- if (String_.HasAtBgn(url, "\"") && String_.HasAtBgn(url, "\""))
+ if (String_.Has_at_bgn(url, "\"") && String_.Has_at_bgn(url, "\""))
url = String_.Mid(url, 1, String_.Len(url) - 1);
app.Gui_mgr().Browser_win().Tab_mgr().Tabs_new_link(url, false);
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/cfgs/Xob_wiki_cfg_bldr_tst.java b/400_xowa/src/gplx/xowa/bldrs/cfgs/Xob_wiki_cfg_bldr_tst.java
index 43c4e74dc..0a8c99996 100644
--- a/400_xowa/src/gplx/xowa/bldrs/cfgs/Xob_wiki_cfg_bldr_tst.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cfgs/Xob_wiki_cfg_bldr_tst.java
@@ -71,11 +71,11 @@ public class Xob_wiki_cfg_bldr_tst {
// line = String_.Replace(line, "/** ", "");
// int pos = String_.FindBwd(line, " (");
// if (pos == String_.Find_none) continue; // en; en_rtl have no "language" line
-// if ( String_.HasAtBgn(lang_code, "be_")
-// || String_.HasAtBgn(lang_code, "crh_")
-// || String_.HasAtBgn(lang_code, "kk_")
-// || String_.HasAtBgn(lang_code, "ku_")
-// || String_.HasAtBgn(lang_code, "sr_")
+// if ( String_.Has_at_bgn(lang_code, "be_")
+// || String_.Has_at_bgn(lang_code, "crh_")
+// || String_.Has_at_bgn(lang_code, "kk_")
+// || String_.Has_at_bgn(lang_code, "ku_")
+// || String_.Has_at_bgn(lang_code, "sr_")
// || String_.In(lang_code, "de_formal", "nb", "nl_informal", "nn", "no")
// ) {
// int new_pos = String_.FindBwd(line, " (", pos - 1);
diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_categorylinks_base.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_categorylinks_base.java
index bd4888b9d..dc27654e5 100644
--- a/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_categorylinks_base.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_categorylinks_base.java
@@ -29,7 +29,7 @@ public abstract class Xob_categorylinks_base extends Xob_sql_dump_base implement
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);
- else if (Bry_.Eq(fld_key, Fld_cl_collation)) cur_collation_is_uca = Bry_.HasAtBgn(src, Collation_uca, fld_bgn, fld_end);
+ else if (Bry_.Eq(fld_key, Fld_cl_collation)) cur_collation_is_uca = Bry_.Has_at_bgn(src, Collation_uca, fld_bgn, fld_end);
else if (Bry_.Eq(fld_key, Fld_cl_timestamp)) {
date_parser.Parse_iso8651_like(cur_modified_on, src, fld_bgn, fld_end);
cur_date = fld_end - fld_bgn == 0 // ignore null dates added by ctg_v1
diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_bin_db_itm.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_bin_db_itm.java
new file mode 100644
index 000000000..f8d546144
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_bin_db_itm.java
@@ -0,0 +1,57 @@
+/*
+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.fsdb.meta.*;
+class Xob_bin_db_itm {
+ public Xob_bin_db_itm(int id, Io_url db_url, int ns_id, int pt_id) {this.id = id; this.db_url = db_url; this.ns_id = ns_id; this.pt_id = pt_id;}
+ public int Id() {return id;} private int id;
+ public int Ns_id() {return ns_id;} private final int ns_id;
+ public int Pt_id() {return pt_id;} private int pt_id;
+ public long Db_len() {return db_len;} public void Db_len_(long v) {this.db_len = v;} private long db_len;
+ public Io_url Db_url() {return db_url;} public void Db_url_(Io_url v) {db_url = v;} private Io_url db_url;
+ public void Set(int id, int pt_id, Io_url db_url) {
+ this.id = id; this.pt_id = pt_id; this.db_url = db_url;
+ }
+ public static String Gen_name_v1(int pt_id) {
+ return String_.Format("fsdb.bin.{0}.sqlite3", Int_.Xto_str_pad_bgn_zero(pt_id, 4));
+ }
+ public static String Gen_name_v2(String domain_str, int ns_id, int pt_id) {
+ String ns_id_str = Int_.Xto_str_pad_bgn_zero(ns_id, 3);
+ String pt_id_str = Int_.Xto_str_pad_bgn_zero(pt_id, 3);
+ return String_.Format("{0}-file-ns.{1}-db.{2}.xowa", domain_str, ns_id_str, pt_id_str);
+ }
+ public static Xob_bin_db_itm new_v1(Fsm_bin_fil fil) {
+ byte[] name = Bry_.new_u8(fil.Url_rel()); // EX: "fsdb.bin.0000.sqlite3"
+ int ns_id = 0; // assume v1 dbs are all in main ns
+ int pt_id = Bry_.Xto_int_or(name, 9 , 13, Int_.MinValue); if (pt_id == Int_.MinValue) throw Err_.new_("bin_db_itm.parse: invalid pt_id; name={0} conn={1}", fil.Url_rel(), fil.Conn().Conn_info().Xto_raw());
+ return new Xob_bin_db_itm(fil.Id(), fil.Url(), ns_id, pt_id);
+ }
+ public static Xob_bin_db_itm new_v2(Fsm_bin_fil fil) {
+ byte[] ns_bgn_tkn = Bry_.new_a7("file-ns."), ns_end_tkn = Bry_.new_a7("-db."), pt_end_tkn = Bry_.new_a7(".xowa");
+ int ns_bgn_tkn_len = ns_bgn_tkn.length, ns_end_tkn_len = ns_end_tkn.length;
+ byte[] name = Bry_.new_u8(fil.Url_rel()); // EX: en.wikipedia.org-file-ns.000-db.001.xowa
+ int ns_bgn = Bry_finder.Find_fwd(name, ns_bgn_tkn, 0); if (ns_bgn == Bry_finder.Not_found) throw Err_.new_("bin_db_itm.parse: invalid ns_bgn; name={0} conn={1}", fil.Url_rel(), fil.Conn().Conn_info().Xto_raw());
+ ns_bgn += ns_bgn_tkn_len;
+ int ns_end = Bry_finder.Find_fwd(name, ns_end_tkn, ns_bgn); if (ns_end == Bry_finder.Not_found) throw Err_.new_("bin_db_itm.parse: invalid ns_end; name={0} conn={1}", fil.Url_rel(), fil.Conn().Conn_info().Xto_raw());
+ int pt_bgn = ns_end + ns_end_tkn_len;
+ int pt_end = Bry_finder.Find_fwd(name, pt_end_tkn, pt_bgn); if (pt_end == Bry_finder.Not_found) throw Err_.new_("bin_db_itm.parse: invalid pt_end; name={0} conn={1}", fil.Url_rel(), fil.Conn().Conn_info().Xto_raw());
+ int ns_id = Bry_.Xto_int_or(name, ns_bgn, ns_end, Int_.MinValue); if (ns_id == Int_.MinValue) throw Err_.new_("bin_db_itm.parse: invalid ns_id; name={0} conn={1}", fil.Url_rel(), fil.Conn().Conn_info().Xto_raw());
+ int pt_id = Bry_.Xto_int_or(name, pt_bgn, pt_end, Int_.MinValue); if (pt_id == Int_.MinValue) throw Err_.new_("bin_db_itm.parse: invalid pt_id; name={0} conn={1}", fil.Url_rel(), fil.Conn().Conn_info().Xto_raw());
+ return new Xob_bin_db_itm(fil.Id(), fil.Url(), ns_id, pt_id);
+ }
+}
diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_bin_db_mgr.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_bin_db_mgr.java
new file mode 100644
index 000000000..48d8fd62b
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_bin_db_mgr.java
@@ -0,0 +1,71 @@
+/*
+XOWA: the XOWA Offline Wiki Application
+Copyright (C) 2012 gnosygnu@gmail.com
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see .
+*/
+package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
+import gplx.core.primitives.*; import gplx.ios.*;
+import gplx.fsdb.meta.*;
+class Xob_bin_db_mgr {
+ private final int[] ns_ids; private final int ns_ids_len;
+ private final Ordered_hash nth_hash = Ordered_hash_.new_(); private final Int_obj_ref tier_key = Int_obj_ref.neg1_();
+ public Xob_bin_db_mgr(int[] ns_ids) {
+ this.ns_ids = ns_ids; this.ns_ids_len = ns_ids.length;
+ }
+ public boolean Schema_is_1() {return schema_is_1;} private boolean schema_is_1;
+ public void Init_by_mnt_mgr(Fsm_mnt_mgr trg_mnt_mgr) {
+ Fsm_mnt_itm trg_mnt_itm = trg_mnt_mgr.Mnts__get_main();
+ this.schema_is_1 = trg_mnt_itm.Db_mgr().File__schema_is_1();
+ Fsm_bin_mgr bin_db_mgr = trg_mnt_itm.Bin_mgr();
+ int len = ns_ids_len;
+ for (int i = 0; i < len; ++i) { // iterate ns_ids and add default nth
+ int ns_id = ns_ids[i];
+ Xob_bin_db_itm nth = new Xob_bin_db_itm(-1, null, ns_id, 0);
+ nth_hash.Add(Int_obj_ref.new_(ns_ids[i]), nth);
+ }
+ len = bin_db_mgr.Dbs__len();
+ for (int i = 0; i < len; ++i) { // iterate bin_dbs to find max pt_id for each ns
+ Fsm_bin_fil fil = bin_db_mgr.Dbs__get_at(i);
+ Xob_bin_db_itm itm = schema_is_1 ? Xob_bin_db_itm.new_v1(fil) : Xob_bin_db_itm.new_v2(fil);
+ int ns_id = itm.Ns_id();
+ Xob_bin_db_itm nth = (Xob_bin_db_itm)nth_hash.Get_by(tier_key.Val_(ns_id));
+ if (itm.Pt_id() > nth.Pt_id()) // update max pt_id
+ nth.Set(itm.Id(), itm.Pt_id(), itm.Db_url()); // note that ns_id is same
+ }
+ len = nth_hash.Count();
+ for (int i = 0; i < len; ++i) { // iterated tiers to calculate max_size
+ Xob_bin_db_itm nth = (Xob_bin_db_itm)nth_hash.Get_at(i);
+ if (nth.Id() == -1) continue; // ignore default nth
+ IoItmFil nth_itm = Io_mgr.I.QueryFil(nth.Db_url());
+ nth.Db_len_(nth_itm.Size());
+ }
+ }
+ public boolean Tier_id_is_last(int tier_id) {return tier_id >= ns_ids_len;} // assumes tier_id is 0 based; EX: 0,1,2 for
+ public int Get_ns_id(int tier_id) {return ns_ids[tier_id];}
+ public int Increment_pt_id(Xob_bin_db_itm itm) {
+ itm.Set(-1, itm.Pt_id() + 1, null);
+ itm.Db_len_(0);
+ return itm.Pt_id();
+ }
+ public String Gen_name(String domain_str, int ns_id, int pt_id) {
+ return schema_is_1 ? Xob_bin_db_itm.Gen_name_v1(pt_id) : Xob_bin_db_itm.Gen_name_v2(domain_str, ns_id, pt_id);
+ }
+ public Xob_bin_db_itm Get_nth_by_tier(int tier_id) {
+ if (schema_is_1) return (Xob_bin_db_itm)nth_hash.Get_by(tier_key.Val_(0)); // v1 is always in ns_0
+ if (tier_id >= ns_ids_len) throw Err_.new_("tier out of range: tier_id={0} len={1}", tier_id, ns_ids_len);
+ int ns_id = ns_ids[tier_id];
+ return (Xob_bin_db_itm)nth_hash.Get_by(tier_key.Val_(ns_id));
+ }
+}
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
index 43b5dc06f..1461ea10c 100644
--- 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
@@ -24,7 +24,7 @@ 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 String[] src_bin_mgr__fsdb_skip_wkrs; 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 final Xof_bin_updater trg_bin_updater = new Xof_bin_updater(); private Xob_bin_db_mgr bin_db_mgr; private int[] ns_ids; private int prv_lnki_tier_id = -1;
private long download_size_max = Io_mgr.Len_mb_long * 5; 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;
@@ -41,7 +41,7 @@ public class Xob_fsdb_make_cmd extends Xob_itm_basic_base implements Xob_cmd {
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);
+ this.bin_db_mgr = new Xob_bin_db_mgr(ns_ids);
// src_bin_mgr
if (src_bin_mgr__fsdb_version != null) {
this.src_fsdb_wkr = Xof_bin_wkr__fsdb_sql.new_(wiki.File__mnt_mgr());
@@ -72,7 +72,9 @@ public class Xob_fsdb_make_cmd extends Xob_itm_basic_base implements Xob_cmd {
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();
+ bin_db_mgr.Init_by_mnt_mgr(trg_mnt_mgr);
trg_atr_fil.Conn().Txn_bgn();
+ trg_cfg_mgr.Tbl().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();
@@ -91,7 +93,7 @@ public class Xob_fsdb_make_cmd extends Xob_itm_basic_base implements Xob_cmd {
byte rslt = Select_fsdb_itms(list);
switch (rslt) {
case Select_rv_stop:
- if (tier_namer.Is_last(tier_id_val))
+ if (bin_db_mgr.Tier_id_is_last(tier_id_val))
loop = false;
else {
++tier_id_val;
@@ -126,6 +128,7 @@ public class Xob_fsdb_make_cmd extends Xob_itm_basic_base implements Xob_cmd {
src_fsdb_wkr.Mnt_mgr().Mnts__get_main().Txn_end(); // NOTE: src_fsdb_wkr will be null if no src db defined
}
trg_atr_fil.Conn().Txn_end(); trg_atr_fil.Conn().Rls_conn();
+ trg_cfg_mgr.Tbl().Conn().Txn_end(); trg_cfg_mgr.Tbl().Conn().Rls_conn();
if (!trg_mnt_itm.Db_mgr().File__solo_file()) {
trg_bin_fil.Conn().Txn_end(); trg_bin_fil.Conn().Rls_conn();
}
@@ -222,13 +225,14 @@ public class Xob_fsdb_make_cmd extends Xob_itm_basic_base implements Xob_cmd {
usr_dlg.Warn_many("", "", "skipped; ttl=~{0} w=~{1} size=~{2} tier=~{3}", fsdb.Orig_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);
+ if (trg_bin_fil == null) // no trg_bin_fil
+ Make_trg_bin_file(Bool_.Y, fsdb, src_rdr_len);
+ 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(Bool_.N, fsdb, src_rdr_len);
+ else if (prv_lnki_tier_id != lnki_tier_id) { // or tier has changed
+ if ( prv_lnki_tier_id != -1
+ && !bin_db_mgr.Schema_is_1()) // do not increment dbs for v1
+ Make_trg_bin_file(Bool_.Y, fsdb, src_rdr_len);
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);
@@ -236,17 +240,34 @@ public class Xob_fsdb_make_cmd extends Xob_itm_basic_base implements Xob_cmd {
}
finally {src_rdr.Rls();}
}
- private void Make_trg_bin_file(Xodb_tbl_oimg_xfer_itm fsdb) {
+ private void Make_trg_bin_file(boolean try_nth, Xodb_tbl_oimg_xfer_itm fsdb, long src_rdr_len) {
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() + List_adp_.Base1);
- trg_bin_fil.Conn().Txn_bgn();
+ boolean make = true;
+ int tier_id = fsdb.Lnki_tier_id();
+ Xob_bin_db_itm nth_bin_db = bin_db_mgr.Get_nth_by_tier(tier_id);
+ if (try_nth) { // try_nth is true; occurs for new runs or changed tier
+ if ( nth_bin_db.Id() != -1 // nth exists;
+ && nth_bin_db.Db_len() + src_rdr_len < trg_bin_db_max) // if src_rdr_len exceeds
+ make = false; // do not make; use existing
}
+ if (make) { // no nth; make it;
+ int ns_id = bin_db_mgr.Get_ns_id(tier_id);
+ int pt_id = bin_db_mgr.Increment_pt_id(nth_bin_db);
+ String new_bin_db_name = bin_db_mgr.Gen_name(wiki.Domain_str(), ns_id, pt_id);
+ this.trg_bin_fil = trg_mnt_itm.Bin_mgr().Dbs__make(new_bin_db_name);
+ 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(), new_bin_db_name);
+ if (!bin_db_mgr.Schema_is_1())
+ 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() + List_adp_.Base1);
+ }
+ }
+ else { // nth available; use it
+ this.trg_bin_fil = trg_mnt_itm.Bin_mgr().Dbs__get_at(nth_bin_db.Id());
+ trg_bin_fil.Bin_len_(nth_bin_db.Db_len());
+ }
+ trg_bin_fil.Conn().Txn_bgn();
}
private void Txn_sav() {
usr_dlg.Prog_many("", "", "committing data: count=~{0} failed=~{1}", exec_count, exec_fail);
@@ -255,6 +276,7 @@ public class Xob_fsdb_make_cmd extends Xob_itm_basic_base implements Xob_cmd {
bldr_cfg_tbl.Conn().Txn_sav();
trg_cfg_mgr.Next_id_commit();
trg_atr_fil.Conn().Txn_sav();
+ trg_cfg_mgr.Tbl().Conn().Txn_sav();
if (src_bin_mgr__fsdb_version != null && src_bin_mgr__fsdb_skip_wkrs != null) {
src_fsdb_wkr.Skip_mgr().Skip_term(src_fsdb_wkr.Mnt_mgr().Mnts__get_main().Cfg_mgr());
}
@@ -303,7 +325,7 @@ public class Xob_fsdb_make_cmd extends Xob_itm_basic_base implements Xob_cmd {
, 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) {
+ public 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")) {
@@ -345,22 +367,3 @@ class Xodb_tbl_oimg_xfer_itm extends Xof_fsdb_itm { public int Lnki_id() {re
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 + List_adp_.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/cmds/files/Xob_xfer_regy_update_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_regy_update_cmd.java
index 050072e54..3f906728d 100644
--- a/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_regy_update_cmd.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_xfer_regy_update_cmd.java
@@ -38,8 +38,9 @@ public class Xob_xfer_regy_update_cmd extends Xob_itm_basic_base implements Xob_
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_bgn();
+ make_db_provider.Exec_sql(Xob_fsdb_regy_tbl.Update_regy_nil);
make_db_provider.Exec_sql(Xob_fsdb_regy_tbl.Insert_fsdb_fil);
- String fsdb_thm_tbl = "fsdb_thm";
+ String fsdb_thm_tbl = fsdb_abc_mgr.Db_mgr().File__schema_is_1() ? "fsdb_xtn_thm" : "fsdb_thm";
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)
? String_.Format(Xob_fsdb_regy_tbl.Insert_fsdb_thm, fsdb_thm_tbl)
: Xob_fsdb_regy_tbl.Insert_fsdb_thm_v0
@@ -133,6 +134,7 @@ class Xob_fsdb_regy_tbl {
, " JOIN fsdb_db.fsdb_dir d ON f.fil_owner_id = d.dir_id"
, ";"
)
+ , Update_regy_nil = "UPDATE xfer_regy SET xfer_status = 0;"
, Update_regy_fil = String_.Concat_lines_nl
( "REPLACE INTO xfer_regy "
, "( lnki_id, lnki_tier_id, lnki_page_id, orig_page_id, orig_repo, lnki_ttl, orig_redirect_src, lnki_ext, orig_media_type"
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
index 221f36204..980276b8f 100644
--- 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
@@ -79,7 +79,7 @@ public class Xob_page_cmd extends Xob_itm_basic_base implements Xobd_wkr, GfoInv
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));
+ 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();
diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_term_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_term_cmd.java
index cde36bddc..dd81541a2 100644
--- a/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_term_cmd.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_term_cmd.java
@@ -22,12 +22,12 @@ public class Xob_term_cmd extends Xob_term_base {
@Override public String Cmd_key() {return KEY;} public static final String KEY = "text.term";
@Override public void Cmd_end_hook() {
Io_mgr.I.DeleteDirDeep(wiki.Fsys_mgr().Tmp_dir());
- 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());
+ Db_cfg_tbl cfg_tbl = wiki.Data__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, Xow_cfg_consts.Key__init__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());
gplx.fsdb.Fsdb_db_mgr__v2_bldr.I.Get_or_make(wiki, false);// always build file.user db; DATE:2015-05-12
- wiki.Data_mgr__core_mgr().Rls();
+ wiki.Data__core_mgr().Rls();
}
}
diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_cleanup_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_cleanup_cmd.java
index f5f1b615d..639ad9bc0 100644
--- a/400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_cleanup_cmd.java
+++ b/400_xowa/src/gplx/xowa/bldrs/cmds/utils/Xob_cleanup_cmd.java
@@ -119,8 +119,8 @@ public class Xob_cleanup_cmd extends Xob_itm_basic_base implements Xob_cmd {
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)
+ if ( String_.Has_at_bgn(url.NameAndExt(), file_prefix)
+ || String_.Has_at_bgn(url.NameAndExt(), html_prefix)
) continue; // skip
Io_mgr.I.DeleteFil(url);
deleted++;
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
index 8a372d002..74db49710 100644
--- 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
@@ -22,7 +22,7 @@ public class Xob_page_dump_cmd_drop extends Xob_itm_basic_base implements Xob_cm
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();
+ Xowd_db_mgr db_mgr = wiki.Data__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);
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
index 22bc4896c..3e57fe91e 100644
--- 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
@@ -22,7 +22,7 @@ public class Xob_page_dump_cmd_make extends Xob_itm_basic_base implements Xob_cm
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();
+ Xowd_db_mgr db_mgr = wiki.Data__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++) {
diff --git a/400_xowa/src/gplx/xowa/bldrs/css/Xoa_css_extractor.java b/400_xowa/src/gplx/xowa/bldrs/css/Xoa_css_extractor.java
index 98cb0eb44..b555cd93b 100644
--- a/400_xowa/src/gplx/xowa/bldrs/css/Xoa_css_extractor.java
+++ b/400_xowa/src/gplx/xowa/bldrs/css/Xoa_css_extractor.java
@@ -57,7 +57,7 @@ public class Xoa_css_extractor {
this.Install_by_wmf((Xowe_wiki)wiki, wiki_html_dir);
}
catch (Exception e) { // if error, failover; paranoia catch for outliers like bad network connectivity fail, or MediaWiki: message not existing; DATE:2013-11-21
- wiki.App().Usr_dlg().Warn_many("", "", "failed while trying to generate css; failing over; wiki='~{0}' err=~{1}", wiki.Domain_str(), Err_.Message_gplx(e));
+ wiki.App().Usr_dlg().Warn_many("", "", "failed to get css; failing over; wiki='~{0}' err=~{1}", wiki.Domain_str(), Err_.Message_gplx(e));
Css_common_failover(); // only failover xowa_common.css; xowa_wiki.css comes from MediaWiki:Common.css / Vector.css
}
}
@@ -77,7 +77,7 @@ public class Xoa_css_extractor {
Logo_setup();
}
private boolean Install_by_db(Xow_wiki wiki, Io_url wiki_html_dir, String css_key) {
- Xowd_db_mgr core_db_mgr = wiki.Data_mgr__core_mgr();
+ Xowd_db_mgr core_db_mgr = wiki.Data__core_mgr();
if ( core_db_mgr == null
|| core_db_mgr.Props() == null
|| core_db_mgr.Props().Schema_is_1()
diff --git a/400_xowa/src/gplx/xowa/bldrs/css/Xoa_css_img_downloader.java b/400_xowa/src/gplx/xowa/bldrs/css/Xoa_css_img_downloader.java
index 1f0db3d45..650f93709 100644
--- a/400_xowa/src/gplx/xowa/bldrs/css/Xoa_css_img_downloader.java
+++ b/400_xowa/src/gplx/xowa/bldrs/css/Xoa_css_img_downloader.java
@@ -70,7 +70,7 @@ public class Xoa_css_img_downloader {
continue;
}
byte[] img_raw = Bry_.Mid(src, bgn_pos, end_pos); int img_raw_len = img_raw.length;
- if (Bry_.HasAtBgn(img_raw, Bry_data_image, 0, img_raw_len)) { // base64
+ if (Bry_.Has_at_bgn(img_raw, Bry_data_image, 0, img_raw_len)) { // base64
bfr.Add_mid(src, prv_pos, end_pos); // nothing to download; just add entire String
prv_pos = end_pos;
continue;
@@ -104,7 +104,7 @@ public class Xoa_css_img_downloader {
}
}
public static byte[] Import_url_build(byte[] stylesheet_prefix, byte[] rel_url_prefix, byte[] css_url) {
- return Bry_.HasAtBgn(css_url, Bry_http_protocol) // css_url already starts with "http"; return self; PAGE:tr.n:Main_Page; DATE:2014-06-04
+ return Bry_.Has_at_bgn(css_url, Bry_http_protocol) // css_url already starts with "http"; return self; PAGE:tr.n:Main_Page; DATE:2014-06-04
? css_url
: Bry_.Add(stylesheet_prefix, css_url)
;
@@ -141,8 +141,8 @@ public class Xoa_css_img_downloader {
;
public byte[] Clean_img_url(byte[] raw, int raw_len) {
int pos_bgn = 0;
- if (Bry_.HasAtBgn(raw, Bry_fwd_slashes, 0, raw_len)) pos_bgn = Bry_fwd_slashes.length;
- if (Bry_.HasAtBgn(raw, Bry_http, 0, raw_len)) pos_bgn = Bry_http.length;
+ if (Bry_.Has_at_bgn(raw, Bry_fwd_slashes, 0, raw_len)) pos_bgn = Bry_fwd_slashes.length;
+ if (Bry_.Has_at_bgn(raw, Bry_http, 0, raw_len)) pos_bgn = Bry_http.length;
int pos_slash = Bry_finder.Find_fwd(raw, Byte_ascii.Slash, pos_bgn, raw_len);
if (pos_slash == Bry_.NotFound) return null; // first segment is site_name; at least one slash must be present for image name; EX: site.org/img_name.jpg
if (pos_slash == raw_len - 1) return null; // "site.org/" is invalid
diff --git a/400_xowa/src/gplx/xowa/bldrs/css/Xob_css_parser__import.java b/400_xowa/src/gplx/xowa/bldrs/css/Xob_css_parser__import.java
index 29c778a11..42e6dfa83 100644
--- a/400_xowa/src/gplx/xowa/bldrs/css/Xob_css_parser__import.java
+++ b/400_xowa/src/gplx/xowa/bldrs/css/Xob_css_parser__import.java
@@ -24,7 +24,7 @@ class Xob_css_parser__import {
public Xob_css_tkn__base Parse(byte[] src, int src_len, int tkn_bgn, int tkn_end) { // " @import"
int bgn_pos = Bry_finder.Find_fwd_while_ws(src, tkn_end, src_len); // skip any ws after " @import"
if (bgn_pos == src_len) return Xob_css_tkn__warn.new_(tkn_bgn, tkn_end, "mirror.parser.import:EOS after import; bgn=~{0}", tkn_bgn);
- if (!Bry_.HasAtBgn(src, Tkn_url_bry, bgn_pos, src_len)) return Xob_css_tkn__warn.new_(tkn_bgn, tkn_end, "mirror.parser.import:url missing; bgn=~{0}", tkn_bgn);
+ if (!Bry_.Has_at_bgn(src, Tkn_url_bry, bgn_pos, src_len)) return Xob_css_tkn__warn.new_(tkn_bgn, tkn_end, "mirror.parser.import:url missing; bgn=~{0}", tkn_bgn);
tkn_end = bgn_pos + Tkn_url_bry.length;
Xob_css_tkn__base frag = url_parser.Parse(src, src_len, bgn_pos, tkn_end);
if (frag.Tid() != Xob_css_tkn__url.Tid_url) return Xob_css_tkn__warn.new_(tkn_bgn, frag.Pos_end(), "mirror.parser.import:url invalid; bgn=~{0}", tkn_bgn);
diff --git a/400_xowa/src/gplx/xowa/bldrs/css/Xob_css_parser__url.java b/400_xowa/src/gplx/xowa/bldrs/css/Xob_css_parser__url.java
index 5065bc1f8..981cfc15b 100644
--- a/400_xowa/src/gplx/xowa/bldrs/css/Xob_css_parser__url.java
+++ b/400_xowa/src/gplx/xowa/bldrs/css/Xob_css_parser__url.java
@@ -47,7 +47,7 @@ class Xob_css_parser__url {
else
return Xob_css_tkn__warn.new_(tkn_bgn, end_pos, "mirror.parser.url:base64 dangling; bgn=~{0} excerpt=~{1}", bgn_pos, String_.new_u8(url_orig));
}
- if (Bry_.HasAtBgn(url_orig, Bry_data_image)) // base64
+ if (Bry_.Has_at_bgn(url_orig, Bry_data_image)) // base64
return Xob_css_tkn__base64.new_(tkn_bgn, end_pos);
byte[] src_url = Xob_url_fixer.Fix(site, url_orig, url_orig_len);
if (src_url == null) // could not convert
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 64b531284..d09f81f31 100644
--- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_itm.java
+++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_itm.java
@@ -47,7 +47,7 @@ abstract class Xoctg_fmtr_itm_base implements Xoctg_fmtr_itm {
Xoa_ttl ttl = itm.Ttl();
byte[] itm_sortkey = itm.Sortkey();
byte[] ttl_bry = ttl.Page_txt();
- if (!Bry_.HasAtBgn(itm_sortkey, ttl_char_0, 0, itm_sortkey.length)) {
+ if (!Bry_.Has_at_bgn(itm_sortkey, ttl_char_0, 0, itm_sortkey.length)) {
grp_end_idx = i;
grp_end_at_col = i == col_end;
return;
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 f3be38184..f177aca07 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
@@ -31,13 +31,13 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr {
}
public void Load_init(Xowe_wiki wiki) {
Load_init_cfg(wiki);
- Xowd_db_file db_core = wiki.Data_mgr__core_mgr().Db__core();
+ Xowd_db_file db_core = wiki.Data__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 version_key = Xoa_gfs_mgr.Build_code(Xowe_wiki.Invk_props, Xow_wiki_props.Invk_bldr_version);
- Db_cfg_hash cfg_hash = db_mgr.Core_data_mgr().Tbl__cfg().Select_as_hash(Xow_cfg_consts.Grp_wiki_init);
+ 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();
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 83b528f56..c4e04c0ff 100644
--- a/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_sql.java
+++ b/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_sql.java
@@ -39,7 +39,7 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble {
return Io_mgr.I.QueryFil(url).ModifiedTime();
}
public void Category_version_update(boolean version_is_1) {
- String grp = Xow_cfg_consts.Grp_wiki_init;
+ 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;
diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_page_rdr__sql.java b/400_xowa/src/gplx/xowa/dbs/Xodb_page_rdr__sql.java
index 28d9d53dd..7603e89b2 100644
--- a/400_xowa/src/gplx/xowa/dbs/Xodb_page_rdr__sql.java
+++ b/400_xowa/src/gplx/xowa/dbs/Xodb_page_rdr__sql.java
@@ -22,7 +22,7 @@ class Xodb_page_rdr__sql implements Xodb_page_rdr {
private final Xowd_db_mgr db_mgr;
private final Xowd_page_tbl page_tbl; private final Db_rdr rdr;
public Xodb_page_rdr__sql(Xowe_wiki wiki) {
- this.db_mgr = wiki.Data_mgr__core_mgr();
+ this.db_mgr = wiki.Data__core_mgr();
this.page_tbl = db_mgr.Tbl__page();
this.rdr = page_tbl.Select_all();
}
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 83f0aaba2..a8a2c8166 100644
--- a/400_xowa/src/gplx/xowa/dbs/Xodb_upgrade_mgr.java
+++ b/400_xowa/src/gplx/xowa/dbs/Xodb_upgrade_mgr.java
@@ -25,7 +25,7 @@ class Xodb_upgrade_mgr {
// version_new = "0.6.2.1";
// }
// if (version_new != null) {
-// db_mgr.Tbl_xowa_cfg().Update(Xodb_mgr_sql.Grp_wiki_init, version_key, version_new);
+// db_mgr.Tbl_xowa_cfg().Update(Xodb_mgr_sql.Grp__wiki_init, version_key, version_new);
// }
}
}
@@ -45,7 +45,7 @@ class Xodb_upgrade_mgr {
// byte data_storage_format_byte = Byte_.parse_(kv.Val_to_str_or_empty());
// String data_storage_format_name = Xoi_dump_mgr.Wtr_tid_to_str(data_storage_format_byte);
// kv.Val_(data_storage_format_name); // update memory
-// db_mgr.Tbl_xowa_cfg().Update(Xodb_mgr_sql.Grp_wiki_init, gfs_data_storage_format, data_storage_format_name); // update_database
+// db_mgr.Tbl_xowa_cfg().Update(Xodb_mgr_sql.Grp__wiki_init, gfs_data_storage_format, data_storage_format_name); // update_database
// break;
// }
// }
diff --git a/400_xowa/src/gplx/xowa/files/Xof_lnki_page.java b/400_xowa/src/gplx/xowa/files/Xof_lnki_page.java
index 527fff3bc..5fef1e02b 100644
--- a/400_xowa/src/gplx/xowa/files/Xof_lnki_page.java
+++ b/400_xowa/src/gplx/xowa/files/Xof_lnki_page.java
@@ -23,6 +23,5 @@ public class Xof_lnki_page {
public static boolean Null_n(int v) {return v != Null;}
public static int Db_load_int(DataRdr rdr, String fld) {return rdr.ReadInt(fld);}
public static int Db_load_int(Db_rdr rdr, String fld) {return rdr.Read_int(fld);}
- public static int Db_load_int(Db_rdr rdr, int ord) {return rdr.Read_int(ord);}
public static int Db_save_int(int v) {return v;}
}
diff --git a/400_xowa/src/gplx/xowa/files/Xof_lnki_time.java b/400_xowa/src/gplx/xowa/files/Xof_lnki_time.java
index 34bd25213..78df0ef46 100644
--- a/400_xowa/src/gplx/xowa/files/Xof_lnki_time.java
+++ b/400_xowa/src/gplx/xowa/files/Xof_lnki_time.java
@@ -24,7 +24,6 @@ public class Xof_lnki_time {
public static int Db_save_int(double v) {return (int)v;}
public static double Db_load_int(DataRdr rdr, String fld) {return rdr.ReadInt(fld);}
public static double Db_load_int(Db_rdr rdr, String fld) {return rdr.Read_int(fld);}
- public static double Db_load_int(Db_rdr rdr, int ord) {return rdr.Read_int(ord);}
public static int X_int(double v) {return (int)v;}
public static String X_str(double v) {return Double_.Xto_str(v);}
public static final double Null = -1;
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 61668ca67..7706f894a 100644
--- a/400_xowa/src/gplx/xowa/files/Xow_file_mgr.java
+++ b/400_xowa/src/gplx/xowa/files/Xow_file_mgr.java
@@ -118,8 +118,9 @@ public class Xow_file_mgr implements GfoInvkAble {
if (db_core != null) return; // already init'd
this.db_core = Fsdb_db_mgr_.new_detect(wiki, wiki.Fsys_mgr().Root_dir(), wiki.Fsys_mgr().File_dir());
// if (db_core == null) return; // no fsdb_core found; exit
- if (db_core == null)
+ if (db_core == null) {
db_core = Fsdb_db_mgr__v2_bldr.I.Get_or_make(wiki, false);
+ }
this.version = Version_2;
this.fsdb_mode = Xof_fsdb_mode.new_v2_gui();
orig_mgr.Init_by_wiki(wiki, fsdb_mode, db_core.File__orig_tbl_ary(), Xof_url_bldr.new_v2());
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 5cc3ac37b..c978536ca 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
@@ -88,6 +88,7 @@ public class Xof_bin_mgr {
fsdb.File_exists_y_();
return rv;
}
+ if (fsdb.Orig_ext().Id_is_video()) continue; // item is video; don't download orig as imageMagick can't thumbnail it; DATE:2015-06-16
rv = wkr.Get_as_rdr(fsdb, Bool_.N, fsdb.Orig_w()); // thumb missing; get orig;
if (rv == Io_stream_rdr_.Noop) {
usr_dlg.Log_direct(String_.Format("bin_mgr:thumb not found; wkr={0} ttl={1} w={2}", wkr.Key(), fsdb.Orig_ttl(), fsdb.Lnki_w()));
@@ -108,7 +109,7 @@ public class Xof_bin_mgr {
}
private boolean Resize(int exec_tid, Xof_fsdb_itm itm, boolean file_is_orig, Io_url src, Io_url trg) {
tmp_size.Html_size_calc(exec_tid, itm.Lnki_w(), itm.Lnki_h(), itm.Lnki_type(), mnt_mgr.Patch_upright(), itm.Lnki_upright(), itm.Orig_ext().Id(), itm.Orig_w(), itm.Orig_h(), Xof_img_size.Thumb_width_img);
- boolean rv = resizer.Exec(src, trg, tmp_size.Html_w(), tmp_size.Html_h(), itm.Orig_ext().Id(), resize_warning);
+ boolean rv = resizer.Resize_exec(src, trg, tmp_size.Html_w(), tmp_size.Html_h(), itm.Orig_ext().Id(), resize_warning);
itm.File_resized_y_();
return rv;
}
diff --git a/400_xowa/src/gplx/xowa/files/cnvs/Xof_img_wkr_resize_img.java b/400_xowa/src/gplx/xowa/files/cnvs/Xof_img_wkr_resize_img.java
index ae3c808ba..12dd75e84 100644
--- a/400_xowa/src/gplx/xowa/files/cnvs/Xof_img_wkr_resize_img.java
+++ b/400_xowa/src/gplx/xowa/files/cnvs/Xof_img_wkr_resize_img.java
@@ -18,5 +18,5 @@ along with this program. If not, see .
package gplx.xowa.files.cnvs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
import gplx.core.primitives.*;
public interface Xof_img_wkr_resize_img {
- boolean Exec(Io_url src, Io_url trg, int trg_w, int trg_h, int ext_id, String_obj_ref rslt_val);
+ boolean Resize_exec(Io_url src, Io_url trg, int trg_w, int trg_h, int ext_id, String_obj_ref rslt_val);
}
diff --git a/400_xowa/src/gplx/xowa/files/cnvs/Xof_img_wkr_resize_img_imageMagick.java b/400_xowa/src/gplx/xowa/files/cnvs/Xof_img_wkr_resize_img_imageMagick.java
index ee932f522..532460ef8 100644
--- a/400_xowa/src/gplx/xowa/files/cnvs/Xof_img_wkr_resize_img_imageMagick.java
+++ b/400_xowa/src/gplx/xowa/files/cnvs/Xof_img_wkr_resize_img_imageMagick.java
@@ -23,7 +23,7 @@ public class Xof_img_wkr_resize_img_imageMagick implements Xof_img_wkr_resize_im
public Xof_img_wkr_resize_img_imageMagick(Xowmf_mgr wmf_mgr, ProcessAdp cmd_convert, ProcessAdp cmd_convert_svg_to_png) {
this.wmf_mgr = wmf_mgr; this.cmd_convert = cmd_convert; this.cmd_convert_svg_to_png = cmd_convert_svg_to_png;
}
- public boolean Exec(Io_url src, Io_url trg, int trg_w, int trg_h, int ext_id, String_obj_ref rslt_val) {
+ public boolean Resize_exec(Io_url src, Io_url trg, int trg_w, int trg_h, int ext_id, String_obj_ref rslt_val) {
if (!Io_mgr.I.ExistsFil(src)) return false;
Io_mgr.I.CreateDirIfAbsent(trg.OwnerDir());
if (init_needed) {
@@ -38,6 +38,6 @@ public class Xof_img_wkr_resize_img_imageMagick implements Xof_img_wkr_resize_im
rslt_val.Val_(cmd.Rslt_out());
boolean rv = cmd.Exit_code_pass();
if (!rv) Xoa_app_.Usr_dlg().Log_many("", "process_warning", "process completed with warnings: ~{0}", cmd.Rslt_out());
- return true;
+ return rv; // NOTE: was true (?); DATE:2015-06-16
}
}
diff --git a/400_xowa/src/gplx/xowa/files/cnvs/Xof_img_wkr_resize_img_mok.java b/400_xowa/src/gplx/xowa/files/cnvs/Xof_img_wkr_resize_img_mok.java
index c24d70c91..5dbf705b8 100644
--- a/400_xowa/src/gplx/xowa/files/cnvs/Xof_img_wkr_resize_img_mok.java
+++ b/400_xowa/src/gplx/xowa/files/cnvs/Xof_img_wkr_resize_img_mok.java
@@ -18,7 +18,7 @@ along with this program. If not, see .
package gplx.xowa.files.cnvs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
import gplx.core.primitives.*; import gplx.gfui.*; import gplx.xowa.files.cnvs.*;
public class Xof_img_wkr_resize_img_mok implements Xof_img_wkr_resize_img {
- public boolean Exec(Io_url src, Io_url trg, int trg_w, int trg_h, int ext_id, String_obj_ref rslt_val) {
+ public boolean Resize_exec(Io_url src, Io_url trg, int trg_w, int trg_h, int ext_id, String_obj_ref rslt_val) {
SizeAdp src_size = ImageAdp_.txt_fil_(src).Size();
int src_w = src_size.Width(), src_h = src_size.Height();
if (trg_w < 1) throw Err_.new_fmt_("trg_w must be > 0: {0}", trg_w);
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 cac0521d5..faec5bc78 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
@@ -44,7 +44,7 @@ public class Fs_root_wkr_fsdb {
String thumb_name = Int_.Xto_str(html_w) + orig_url.Ext();
Io_url thumb_url = thumb_dir.GenSubFil_ary(thumb_rel + orig_url.Info().DirSpr(), thumb_name);
if (!Io_mgr.I.ExistsFil(thumb_url)) {
- if (!wiki.Appe().File_mgr().Img_mgr().Wkr_resize_img().Exec(orig_url, thumb_url, html_w, html_h, fsdb_itm.Orig_ext().Id(), tmp_resize_result))
+ if (!wiki.Appe().File_mgr().Img_mgr().Wkr_resize_img().Resize_exec(orig_url, thumb_url, html_w, html_h, fsdb_itm.Orig_ext().Id(), tmp_resize_result))
return false;
}
fsdb_itm.Html_size_(html_w, html_h);
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 da107af22..584b69f56 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
@@ -34,7 +34,7 @@ class Xof_file_fxt {
this.orig_mgr = wiki.File__orig_mgr();
Xof_repo_fxt.Repos_init(app.File_mgr(), true, 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();
+ Xowd_db_file text_db = wiki.Data__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.Get_or_make(wiki, Bool_.Y);
fsdb_mgr.Mnt_mgr().Ctor_by_load(fsdb_core);
fsdb_mgr.Mnt_mgr().Mnts__get_main().Bin_mgr().Dbs__make("temp.xowa");
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 b09de2690..ad889bce2 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
@@ -18,7 +18,7 @@ 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.fsdb.*;
public class Xob_orig_tbl_bldr extends Xob_itm_basic_base implements Xob_cmd {
- private Db_conn conn;
+ private Db_conn conn; private boolean schema_1;
public Xob_orig_tbl_bldr(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
public String Cmd_key() {return Xob_cmd_keys.Key_file_orig_reg;}
public void Cmd_init(Xob_bldr bldr) {}
@@ -27,6 +27,7 @@ public class Xob_orig_tbl_bldr extends Xob_itm_basic_base implements Xob_cmd {
fsdb_mode.Tid_v2_bld_y_();
wiki.Init_assert();
Fsdb_db_mgr db_core_mgr = Fsdb_db_mgr_.new_detect(wiki, wiki.Fsys_mgr().Root_dir(), wiki.Fsys_mgr().File_dir());
+ this.schema_1 = db_core_mgr.File__schema_is_1();
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());
@@ -35,17 +36,22 @@ public class Xob_orig_tbl_bldr extends Xob_itm_basic_base implements Xob_cmd {
public void Cmd_end() {}
public void Cmd_term() {}
private void Exec() {
- 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);
+ String tbl_name = "orig_reg", fld_status = "orig_status";
+ if (schema_1) {
+ tbl_name = "wiki_orig";
+ fld_status = "status";
+ }
+ conn.Exec_sql_plog_txn("orig_wkr.deleting orig_reg" , String_.Format(Sql_delete_wiki_orig, tbl_name)); // 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" , String_.Format(Sql_create_xfer_direct, tbl_name, fld_status));
+ conn.Exec_sql_plog_txn("orig_wkr.inserting xfer redirect" , String_.Format(Sql_create_xfer_redirect, tbl_name, fld_status));
+ conn.Exec_sql_plog_txn("orig_wkr.inserting orig direct" , String_.Format(Sql_create_orig_direct, tbl_name, fld_status));
+ conn.Exec_sql_plog_txn("orig_wkr.inserting orig redirect" , String_.Format(Sql_create_orig_redirect, tbl_name, fld_status));
}
- public static final String
- Sql_delete_wiki_orig = "DELETE FROM orig_reg;"
+ private static final String
+ Sql_delete_wiki_orig = "DELETE FROM {0};"
, Sql_create_xfer_direct = String_.Concat_lines_nl
- ( "INSERT INTO orig_reg "
- , "(orig_ttl, orig_status, orig_repo, orig_ext, orig_w, orig_h, orig_redirect)"
+ ( "INSERT INTO {0} "
+ , "(orig_ttl, {1}, orig_repo, orig_ext, orig_w, orig_h, orig_redirect)"
, "SELECT DISTINCT"
, " xfer.lnki_ttl"
, ", 1 --pass"
@@ -55,12 +61,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 orig_reg cur ON xfer.lnki_ttl = cur.orig_ttl"
+ , " LEFT JOIN {0} cur ON xfer.lnki_ttl = cur.orig_ttl"
, "WHERE cur.orig_ttl IS NULL"
)
, Sql_create_xfer_redirect = String_.Concat_lines_nl
- ( "INSERT INTO orig_reg "
- , "(orig_ttl, orig_status, orig_repo, orig_ext, orig_w, orig_h, orig_redirect)"
+ ( "INSERT INTO {0} "
+ , "(orig_ttl, {1}, orig_repo, orig_ext, orig_w, orig_h, orig_redirect)"
, "SELECT DISTINCT"
, " xfer.orig_redirect_src"
, ", 1 --pass"
@@ -70,13 +76,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 orig_reg cur ON xfer.orig_redirect_src = cur.orig_ttl"
+ , " LEFT JOIN {0} 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 orig_reg "
- , "(orig_ttl, orig_status, orig_repo, orig_ext, orig_w, orig_h, orig_redirect)"
+ ( "INSERT INTO {0} "
+ , "(orig_ttl, {1}, orig_repo, orig_ext, orig_w, orig_h, orig_redirect)"
, "SELECT DISTINCT"
, " orig.lnki_ttl"
, ", 0 --unknown"
@@ -86,15 +92,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 orig_reg cur ON orig.lnki_ttl = cur.orig_ttl"
+ , " LEFT JOIN {0} 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 orig_reg "
- , "(orig_ttl, orig_status, orig_repo, orig_ext, orig_w, orig_h, orig_redirect)"
+ ( "INSERT INTO {0} "
+ , "(orig_ttl, {1}, orig_repo, orig_ext, orig_w, orig_h, orig_redirect)"
, "SELECT DISTINCT"
, " orig.orig_redirect_ttl"
, ", 0 --unknown"
@@ -104,7 +110,7 @@ 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 orig_reg cur ON orig.orig_redirect_ttl = cur.orig_ttl"
+ , " LEFT JOIN {0} 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
diff --git a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr__wmf_api.java b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr__wmf_api.java
index ec32614ef..cdae33813 100644
--- a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr__wmf_api.java
+++ b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr__wmf_api.java
@@ -26,6 +26,7 @@ public class Xof_orig_wkr__wmf_api implements Xof_orig_wkr {
public byte Tid() {return Xof_orig_wkr_.Tid_wmf_api;}
public void Find_by_list(Ordered_hash rv, List_adp itms) {Xof_orig_wkr_.Find_by_list(this, rv, itms);}
public Xof_orig_itm Find_as_itm(byte[] ttl, int list_idx, int list_len) {
+ if (!gplx.ios.IoEngine_system.Web_access_enabled) return Xof_orig_itm.Null; // don't check api if download disabled, else prog messages; DATE:2015-06-17
Xoa_app_.Usr_dlg().Prog_none("", "", Prog_msg(list_idx, list_len, ttl));
boolean found = orig_api.Api_query_size(api_rv, download_wkr, repo_mgr, ttl, Xof_img_size.Null, Xof_img_size.Null); // pass in null size to look for orig; DATE:2015-02-10
if (!found) return Xof_orig_itm.Null; // ttl not found by api; return
diff --git a/400_xowa/src/gplx/xowa/files/repos/Xof_repo_itm.java b/400_xowa/src/gplx/xowa/files/repos/Xof_repo_itm.java
index 3c40b921d..701b45de9 100644
--- a/400_xowa/src/gplx/xowa/files/repos/Xof_repo_itm.java
+++ b/400_xowa/src/gplx/xowa/files/repos/Xof_repo_itm.java
@@ -50,7 +50,7 @@ public class Xof_repo_itm implements GfoInvkAble {
this.wiki_abrv_xo = Xow_domain_abrv_xo_.To_bry(v, domain_itm.Lang_itm(), domain_itm.Domain_type());
}
public Xof_repo_itm Root_str_(String root_str) {
- this.wmf_fsys = String_.HasAtBgn(root_str, "http") || String_.HasAtBgn(root_str, "ftp");
+ this.wmf_fsys = String_.Has_at_bgn(root_str, "http") || String_.Has_at_bgn(root_str, "ftp");
if (wmf_fsys) {
this.root_bry = Bry_.new_u8(root_str);
this.dir_spr = Byte_ascii.Slash;
diff --git a/400_xowa/src/gplx/xowa/files/xfers/Xof_xfer_mgr.java b/400_xowa/src/gplx/xowa/files/xfers/Xof_xfer_mgr.java
index e5532050e..5612394ef 100644
--- a/400_xowa/src/gplx/xowa/files/xfers/Xof_xfer_mgr.java
+++ b/400_xowa/src/gplx/xowa/files/xfers/Xof_xfer_mgr.java
@@ -291,7 +291,7 @@ public class Xof_xfer_mgr {
private boolean Img_convert(Io_url src_url, Io_url trg_url) {
rslt.Atrs_src_trg_(src_url.Xto_api(), trg_url); // NOTE: must be set at start; Img_rename_by_size may overwrite trg
if (Io_mgr.I.ExistsFil(trg_url)) return true; // NOTE: already converted; occurs when same image used twice on same page (EX: flags)
- if (!file_mgr.Img_mgr().Wkr_resize_img().Exec(src_url, trg_url, lnki_w, lnki_h, orig_ext.Id(), img_convert_rslt)) {
+ if (!file_mgr.Img_mgr().Wkr_resize_img().Resize_exec(src_url, trg_url, lnki_w, lnki_h, orig_ext.Id(), img_convert_rslt)) {
return rslt.Fail("convert failed|" + src_url.Raw() + "|" + img_convert_rslt.Val());
}
if (lnki_w < 1 || lnki_h < 1) { // lnki_w or lnki_h is invalid >>> get real size for thumb
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 316ddb498..3b4325a73 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
@@ -228,7 +228,7 @@ class Xog_html_itm__href_extractor {
default: throw Err_.unhandled(text_tid);
}
int href_bgn = 2; // 2 for length of "2|"
- if (Bry_.HasAtBgn(text_bry, File_protocol_bry, 2, text_len)) {
+ if (Bry_.Has_at_bgn(text_bry, File_protocol_bry, 2, text_len)) {
href_bgn += File_protocol_len; // skip "file://"
}
Byte_obj_val href_tid = (Byte_obj_val)href_trie.Match_bgn(text_bry, href_bgn, text_len);
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 10fc2a0f0..3afc429e0 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
@@ -100,7 +100,6 @@ public class Xog_tab_itm implements GfoInvkAble {
public void Show_url_bgn(Xoa_url url) {
this.tab_is_loading = true;
Xoae_app app = win.App(); Gfo_usr_dlg usr_dlg = app.Usr_dlg();
-// Xoae_page page = Xoae_page.Empty;
if ( url.Anchor_str() != null // url has anchor
&& url.Eq_page(page.Url()) // url has same page_name as existing page
&& url.Args().length == 0) { // url has no args; needed for Category:A?from=b#mw-pages
diff --git a/400_xowa/src/gplx/xowa/html/css/Xob_css_status.java b/400_xowa/src/gplx/xowa/html/css/Xob_css_status.java
index 41a702f3f..ead053cb1 100644
--- a/400_xowa/src/gplx/xowa/html/css/Xob_css_status.java
+++ b/400_xowa/src/gplx/xowa/html/css/Xob_css_status.java
@@ -47,7 +47,7 @@ public class Xob_css_status {
rv.Fs_exists_(exists, css_dir);
}
private static void Chk_db(Xob_css_status rv, Xow_wiki wiki, Io_url css_dir) {
- Xowd_db_mgr core_db_mgr = wiki.Data_mgr__core_mgr();
+ Xowd_db_mgr core_db_mgr = wiki.Data__core_mgr();
if ( core_db_mgr == null
|| core_db_mgr.Props() != null
|| !core_db_mgr.Props().Schema_is_1()
diff --git a/400_xowa/src/gplx/xowa/html/hdumps/abrvs/Xohd_abrv_.java b/400_xowa/src/gplx/xowa/html/hdumps/abrvs/Xohd_abrv_.java
index d9486859a..e3b9d2ee1 100644
--- a/400_xowa/src/gplx/xowa/html/hdumps/abrvs/Xohd_abrv_.java
+++ b/400_xowa/src/gplx/xowa/html/hdumps/abrvs/Xohd_abrv_.java
@@ -21,7 +21,7 @@ public class Xohd_abrv_ {
public static final byte
Tid_dir = 1, Tid_img = 2, Tid_img_style = 3, Tid_file_play = 4, Tid_file_info = 5, Tid_file_mgnf = 6
, Tid_hiero_dir = 7, Tid_gallery_box_max = 8, Tid_gallery_box_w = 9, Tid_gallery_img_w = 10, Tid_gallery_img_pad = 11
- , Tid_redlink = 12, Tid_toc = 13
+ , Tid_redlink = 12, Tid_toc = 13, Tid_hdr_bgn = 14, Tid_hdr_end = 15
;
public static final byte[]
Key_dir = Bry_.new_a7("~{xowa_dir}")
@@ -37,6 +37,8 @@ public class Xohd_abrv_ {
, Key_gallery_img_pad = Bry_.new_a7("xowa_gly_img_pad='")
, Key_redlink = Bry_.new_a7("xowa_redlink='")
, Key_toc = Bry_.new_a7("~{xowa_toc}")
+ , Key_hdr_bgn = Bry_.new_a7(""
if (uid == bry_rdr.Or_int()) {usr_dlg.Warn_many("", "", "index is not a valid int; hpg=~{0} text=~{1}", hpg.Url().Xto_full_str_safe(), Bry_.Mid_safe(src, uid_bgn, uid_end)); return uid_end;}
@@ -149,3 +152,11 @@ class Hdump_html_fmtr_itm {
public boolean Elem_is_xnde() {return elem_is_xnde;} private final boolean elem_is_xnde;
public byte Subst_end_byte() {return subst_end_byte;} private final byte subst_end_byte;
}
+class Xohd_abrv_wkr__hdr {
+ public int Write_bgn(Bry_bfr bfr, Xog_page hpg, int uid, int rv) {
+ return rv;
+ }
+ public int Write_end(Bry_bfr bfr, Xog_page hpg, int uid, int rv) {
+ return rv;
+ }
+}
diff --git a/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_hdump_img_cmd.java b/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_hdump_img_cmd.java
index 328cf924a..7a1069a23 100644
--- a/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_hdump_img_cmd.java
+++ b/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_hdump_img_cmd.java
@@ -35,7 +35,7 @@ class Xob_hdump_img_cmd extends Xob_itm_basic_base implements Xob_cmd {
html_tbl = new Xowd_html_tbl(conn, wiki.Db_mgr_as_sql().Core_data_mgr().Props().Zip_tid_text());
int cur_page_id = -1;
while (rdr.Move_next()) {
- int lnki_page_id = rdr.Read_int(0);
+ int lnki_page_id = rdr.Read_int("lnki_page_id");
if (lnki_page_id != cur_page_id) {
Save(cur_page_id, bfr.Xto_bry_and_clear());
cur_page_id = lnki_page_id;
diff --git a/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_link_dump_cmd.java b/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_link_dump_cmd.java
index 900ec85ba..67374eddd 100644
--- a/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_link_dump_cmd.java
+++ b/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_link_dump_cmd.java
@@ -20,7 +20,7 @@ import gplx.core.brys.*; import gplx.dbs.*;
public class Xob_link_dump_cmd {
private Xob_link_dump_tbl tbl; private int src_page_id; private Io_url page_db_url;
public void Init_by_wiki(Xowe_wiki wiki) {
- this.page_db_url = wiki.Data_mgr__core_mgr().Db__core().Url();
+ this.page_db_url = wiki.Data__core_mgr().Db__core().Url();
this.tbl = Xob_link_dump_tbl.Get_or_new(wiki);
tbl.Insert_bgn();
}
diff --git a/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_redlink_mkr_cmd.java b/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_redlink_mkr_cmd.java
index f9994930a..534010c82 100644
--- a/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_redlink_mkr_cmd.java
+++ b/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_redlink_mkr_cmd.java
@@ -26,7 +26,7 @@ public class Xob_redlink_mkr_cmd extends Xob_itm_basic_base implements Xob_cmd {
private void Read_data() {
Bry_bfr bfr = Bry_bfr.reset_(255);
wiki.Init_assert();
- Xowd_db_file core_db = wiki.Data_mgr__core_mgr().Db__core();
+ Xowd_db_file core_db = wiki.Data__core_mgr().Db__core();
Xob_db_file link_dump_db = Xob_db_file.new__redlink(wiki.Fsys_mgr().Root_dir());
Db_attach_rdr attach_rdr = new Db_attach_rdr(link_dump_db.Conn(), "page_db", core_db.Url());
attach_rdr.Attach();
@@ -39,7 +39,7 @@ public class Xob_redlink_mkr_cmd extends Xob_itm_basic_base implements Xob_cmd {
int html_db_id = rdr.Read_int(page_tbl.Fld_html_db_id().Name());
if (html_db_id != cur_html_db_id) {
if (html_dump_tbl != null) html_dump_tbl.Conn().Txn_end();
- html_dump_tbl = wiki.Data_mgr__core_mgr().Dbs__get_at(html_db_id).Tbl__html();
+ html_dump_tbl = wiki.Data__core_mgr().Dbs__get_at(html_db_id).Tbl__html();
html_dump_tbl.Conn().Txn_bgn();
cur_html_db_id = html_db_id;
}
diff --git a/400_xowa/src/gplx/xowa/html/hdumps/data/Xohd_page_html_mgr__load.java b/400_xowa/src/gplx/xowa/html/hdumps/data/Xohd_page_html_mgr__load.java
index b1a1ee4f2..b007b2ffc 100644
--- a/400_xowa/src/gplx/xowa/html/hdumps/data/Xohd_page_html_mgr__load.java
+++ b/400_xowa/src/gplx/xowa/html/hdumps/data/Xohd_page_html_mgr__load.java
@@ -43,7 +43,7 @@ public class Xohd_page_html_mgr__load {
rows.Clear();
}
private void Parse_data(Xog_page hpg, Xowd_html_row row) {
- rdr.Src_(row.Data());
+ rdr.Init(row.Data());
while (!rdr.Pos_is_eos()) {
int tid = rdr.Read_int_to_pipe();
switch (tid) {
diff --git a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__anchor.java b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__anchor.java
index 2296073e8..66d90ecbf 100644
--- a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__anchor.java
+++ b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__anchor.java
@@ -44,7 +44,7 @@ public class Xow_hzip_itm__anchor {
private int Save_img_full(Bry_bfr bfr, Xodump_stats_itm stats, byte[] src, int src_len, int bgn, int pos) {
bfr.Add(Xow_hzip_dict.Bry_img_full);
int xatrs_bgn = Bry_finder.Move_fwd(src, Find_img_xatrs, pos, src_len); if (xatrs_bgn == Bry_finder.Not_found) return hzip_mgr.Warn_by_pos_add_dflt("a.img_xatrs_missing", bgn, pos);
- bry_rdr.Src_(src).Pos_(xatrs_bgn);
+ bry_rdr.Init(src, xatrs_bgn);
int a_cls = bry_rdr.Read_int_to_pipe();
int a_rel = bry_rdr.Read_int_to_pipe();
int img_rel = bry_rdr.Read_int_to_pipe();
diff --git a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__header_tst.java b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__header_tst.java
index 942c2411e..4233fa02c 100644
--- a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__header_tst.java
+++ b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__header_tst.java
@@ -24,15 +24,15 @@ public class Xow_hzip_itm__header_tst {
// fxt.Test_save(brys, "
A
");
// fxt.Test_load(brys, "A
");
}
- @Test public void Html_basic() {
+// @Test public void Html_basic() {
// fxt.Test_html("==A==", "A
\n");
- }
- @Test public void Srl_anchor() {
+// }
+// @Test public void Srl_anchor() {
// byte[][] brys = Bry_.Ary(Xow_hzip_dict.Bry_hdr_lhs, Bry_.ints_(2), Bry_.new_a7("A b c"), Xow_hzip_dict.Escape_bry);
// fxt.Test_save(brys, "A b c
");
//// fxt.Test_load(brys, "A b c
");
- }
- @Test public void Html_anchor() {
+// }
+// @Test public void Html_anchor() {
// fxt.Test_html("==A [[b]] c==", "A b c
\n");
- }
+// }
}
diff --git a/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_mgr.java b/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_mgr.java
index 834bd82c7..48e3c6ba5 100644
--- a/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_mgr.java
+++ b/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_mgr.java
@@ -82,7 +82,7 @@ public class Xow_popup_mgr implements GfoInvkAble, GfoEvObj {
Show_popup_html(Cbk_xowa_popups_show_update, Mode_show_all, popup_itm);
}
public String Get_async_bgn(byte[] js_cbk, byte[] href) {
- if (Bry_.HasAtBgn(href, gplx.xowa.parsers.lnkes.Xop_lnke_wkr.Bry_xowa_protocol)) return null; // ignore xowa-cmd
+ if (Bry_.Has_at_bgn(href, gplx.xowa.parsers.lnkes.Xop_lnke_wkr.Bry_xowa_protocol)) return null; // ignore xowa-cmd
synchronized (thread_lock) {
if (async_itm != null) async_itm.Cancel();
async_itm = new Xow_popup_itm(++async_id_next, href, Bry_.Empty, show_init_word_count);
diff --git a/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_parser.java b/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_parser.java
index eed70eb5e..b82faf756 100644
--- a/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_parser.java
+++ b/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_parser.java
@@ -55,7 +55,7 @@ public class Xow_popup_parser {
tmpl_keeplist = new Xop_keeplist_wiki(wiki);
tmpl_ctx.Tmpl_keeplist_(tmpl_keeplist);
}
- if (!Bry_.HasAtEnd(raw, Byte_ascii.NewLine_bry)) raw = Bry_.Add(raw, Byte_ascii.NewLine_bry);
+ if (!Bry_.Has_at_end(raw, Byte_ascii.NewLine_bry)) raw = Bry_.Add(raw, Byte_ascii.NewLine_bry);
tmpl_keeplist.Srl().Load_by_bry(raw);
}
private boolean Canceled(Xow_popup_itm popup_itm, Xog_tab_itm cur_tab) {return popup_itm.Canceled() || cur_tab != null && cur_tab.Tab_is_loading();}
diff --git a/400_xowa/src/gplx/xowa/langs/grammars/Xol_grammar_fi.java b/400_xowa/src/gplx/xowa/langs/grammars/Xol_grammar_fi.java
index 7be8292fd..ef1a64d2a 100644
--- a/400_xowa/src/gplx/xowa/langs/grammars/Xol_grammar_fi.java
+++ b/400_xowa/src/gplx/xowa/langs/grammars/Xol_grammar_fi.java
@@ -53,7 +53,7 @@ public class Xol_grammar_fi implements Xol_grammar {
byte[] lower = lang.Case_mgr().Case_build_lower(word, 0, word_len);
boolean aou = Vowel_harmony(lower, word_len);
// PHP: if ( preg_match( '/wiki$/i', $word ) ) $aou = false;
- if (aou && Bry_.HasAtEnd(lower, Xoa_url_parser.Bry_wiki_name))
+ if (aou && Bry_.Has_at_end(lower, Xoa_url_parser.Bry_wiki_name))
aou = false;
// PHP: if ( preg_match( '/[bcdfghjklmnpqrstvwxz]$/i', $word ) ) $word .= 'i';
switch (lower[word_len - 1]) {
diff --git a/400_xowa/src/gplx/xowa/langs/numbers/Xol_num_fmtr_base.java b/400_xowa/src/gplx/xowa/langs/numbers/Xol_num_fmtr_base.java
index d87c99e74..748bb7f6a 100644
--- a/400_xowa/src/gplx/xowa/langs/numbers/Xol_num_fmtr_base.java
+++ b/400_xowa/src/gplx/xowa/langs/numbers/Xol_num_fmtr_base.java
@@ -76,7 +76,7 @@ public class Xol_num_fmtr_base implements GfoInvkAble {
wkr.Fmt(src, num_bgn, i, tmp);
num_bgn = dec_pos = -1; // reset vars
if (b == Byte_ascii.Dot // current char is "."; NOTE: all languages treat "." as decimal separator for parse; EX: for de, "1.23" is "1,23" DATE:2013-10-21
- //|| Bry_.HasAtBgn(src, dec_dlm, i, src_len)
+ //|| Bry_.Has_at_bgn(src, dec_dlm, i, src_len)
) { // current char is languages's decimal delimiter; note this can be "," or any other multi-byte separator
dec_pos = i;
// i += dec_dlm.length - 1;
diff --git a/400_xowa/src/gplx/xowa/servers/http/Http_server_mgr.java b/400_xowa/src/gplx/xowa/servers/http/Http_server_mgr.java
index 99da005f3..48ec54fef 100644
--- a/400_xowa/src/gplx/xowa/servers/http/Http_server_mgr.java
+++ b/400_xowa/src/gplx/xowa/servers/http/Http_server_mgr.java
@@ -220,7 +220,7 @@ class HttpRequest implements Runnable{
if(!req.contains("%file%")){
if(req.equals("/")) { // no page; EX:"localhost:8080" vs "localhost:8080/en.wikipedia.org/wiki/Earth"
String home_url = app.Http_server().Home();;
- if (String_.HasAtBgn(home_url, "file://")) {
+ if (String_.Has_at_bgn(home_url, "file://")) {
Io_url file_url = Io_url_.http_any_(home_url, Op_sys.Cur().Tid_is_wnt());
String page_html = Io_mgr.I.LoadFilStr(file_url);
Write_page(dos, page_html, app_root_dir, wiki_domain);
diff --git a/400_xowa/src/gplx/xowa/servers/http/Http_server_wkr_.java b/400_xowa/src/gplx/xowa/servers/http/Http_server_wkr_.java
index de9dd81e3..fecb72fb0 100644
--- a/400_xowa/src/gplx/xowa/servers/http/Http_server_wkr_.java
+++ b/400_xowa/src/gplx/xowa/servers/http/Http_server_wkr_.java
@@ -21,8 +21,8 @@ class Http_server_wkr_ {
public static String Assert_main_page(Xoae_app app, String req) {
int mode = -1;
String[] req_array = String_.Split(req, "/");
- if (String_.HasAtEnd(req, "wiki/")) mode = 0;
- else if (String_.HasAtEnd(req, "wiki")) mode = 1;
+ if (String_.Has_at_end(req, "wiki/")) mode = 0;
+ else if (String_.Has_at_end(req, "wiki")) mode = 1;
else if (req_array.length == 3) mode = 2;
if (mode == -1) return req; // not a link to a Main Page; EX:localhost:8080/en.wikipedia.org/wiki/Earth
if (req_array.length < 3) return req; // shouldn't happen; EX: "localhost:8080wiki"
diff --git a/400_xowa/src/gplx/xowa/servers/tcp/Xosrv_msg_rdr_tst.java b/400_xowa/src/gplx/xowa/servers/tcp/Xosrv_msg_rdr_tst.java
index 34ee625cf..916b1795a 100644
--- a/400_xowa/src/gplx/xowa/servers/tcp/Xosrv_msg_rdr_tst.java
+++ b/400_xowa/src/gplx/xowa/servers/tcp/Xosrv_msg_rdr_tst.java
@@ -55,7 +55,7 @@ class Xosrv_msg_rdr_fxt {
msg_rdr_stream.Data_bry_(raw_bry).Read_limit_(raw_bry.length);
Xosrv_msg msg = msg_rdr.Read();
String msg_text = String_.new_a7(msg.Msg_text());
- Tfds.Eq_true(String_.HasAtBgn(msg_text, expd_err), msg_text);
+ Tfds.Eq_true(String_.Has_at_bgn(msg_text, expd_err), msg_text);
}
public void Test_print(Xosrv_msg msg, String expd) {
Bry_bfr bfr = Bry_bfr.new_();
diff --git a/400_xowa/src/gplx/xowa/specials/search/Xog_search_suggest_cmd.java b/400_xowa/src/gplx/xowa/specials/search/Xog_search_suggest_cmd.java
index 0f8d2484f..f93c09677 100644
--- a/400_xowa/src/gplx/xowa/specials/search/Xog_search_suggest_cmd.java
+++ b/400_xowa/src/gplx/xowa/specials/search/Xog_search_suggest_cmd.java
@@ -72,7 +72,7 @@ class Xog_search_suggest_cmd implements GfoInvkAble, Cancelable {
for (int i = 0; i < page_ary_len; i++) {
Xowd_page_itm page = page_ary[i];
if (page != null) {
- if (!Bry_.HasAtBgn(page.Ttl_page_db(), search_ttl_bry)) continue; // look-ahead may return other titles that don't begin with search; ignore
+ if (!Bry_.Has_at_bgn(page.Ttl_page_db(), search_ttl_bry)) continue; // look-ahead may return other titles that don't begin with search; ignore
if (page.Text_len() > all_pages_min) {
rslts_2.Add(page);
idx++;
diff --git a/400_xowa/src/gplx/xowa/specials/search/Xosrh_qry_itm.java b/400_xowa/src/gplx/xowa/specials/search/Xosrh_qry_itm.java
index 2b8fbf8af..2e55c3a91 100644
--- a/400_xowa/src/gplx/xowa/specials/search/Xosrh_qry_itm.java
+++ b/400_xowa/src/gplx/xowa/specials/search/Xosrh_qry_itm.java
@@ -50,9 +50,9 @@ class Xosrh_qry_itm {
byte wiki_db_tid = wiki.Db_mgr().Tid();
if (wiki_db_tid == Xodb_mgr_sql.Tid_sql
&& wiki.Appe().Gui_mgr().Search_suggest_mgr().Auto_wildcard()) { // HACK: auto-asterisk words for sqlite; DATE:2013-09-05
- if (!Bry_.HasAtEnd(search_word, new byte[] {Byte_ascii.Asterisk}))
+ if (!Bry_.Has_at_end(search_word, new byte[] {Byte_ascii.Asterisk}))
search_word = Bry_.Add(search_word, Byte_ascii.Asterisk);
- if (!Bry_.HasAtBgn(search_word, new byte[] {Byte_ascii.Asterisk}))
+ if (!Bry_.Has_at_bgn(search_word, new byte[] {Byte_ascii.Asterisk}))
search_word = Bry_.Add(Byte_ascii.Asterisk, search_word);
}
wiki.Db_mgr().Load_mgr().Load_search(cancelable, found, search_word, results_max);
diff --git a/400_xowa/src/gplx/xowa/specials/search/Xows_arg_mgr.java b/400_xowa/src/gplx/xowa/specials/search/Xows_arg_mgr.java
index a163c722d..e9f995924 100644
--- a/400_xowa/src/gplx/xowa/specials/search/Xows_arg_mgr.java
+++ b/400_xowa/src/gplx/xowa/specials/search/Xows_arg_mgr.java
@@ -52,7 +52,7 @@ class Xows_arg_mgr {
}
}
else {
- if (Bry_.HasAtBgn(key, Ns_bry)) // check for ns*; EX: &ns0=1&ns8=1; NOTE: lowercase only
+ if (Bry_.Has_at_bgn(key, Ns_bry)) // check for ns*; EX: &ns0=1&ns8=1; NOTE: lowercase only
ns_mgr.Add_by_parse(key, arg.Val_bry());
}
}
diff --git a/400_xowa/src/gplx/xowa/specials/search/Xows_core.java b/400_xowa/src/gplx/xowa/specials/search/Xows_core.java
index cb0338d94..b915391fb 100644
--- a/400_xowa/src/gplx/xowa/specials/search/Xows_core.java
+++ b/400_xowa/src/gplx/xowa/specials/search/Xows_core.java
@@ -66,7 +66,7 @@ class Xows_core {
cmd_hash.Del(cmd.Key());
}
private void Assert_page_count(Xowe_wiki wiki) {
- Xowd_db_file search_db = wiki.Data_mgr__core_mgr().Db__search();
+ Xowd_db_file search_db = wiki.Data__core_mgr().Db__search();
if (ask_for_upgrade
&& wiki.App().App_type().Uid_is_gui()
&& !search_db.Tbl__search_word().Ddl__page_count()
diff --git a/400_xowa/src/gplx/xowa/specials/search/Xows_db_wkr.java b/400_xowa/src/gplx/xowa/specials/search/Xows_db_wkr.java
index d0a9d1bc0..23876d2dd 100644
--- a/400_xowa/src/gplx/xowa/specials/search/Xows_db_wkr.java
+++ b/400_xowa/src/gplx/xowa/specials/search/Xows_db_wkr.java
@@ -22,7 +22,7 @@ import gplx.gfui.*;
class Xows_db_wkr {
public void Search(Xows_ui_cmd cmd, Xows_ui_qry qry, Xows_ui_rslt rslt, Xows_db_cache cache, Xow_wiki wiki) {
// assert matcher
- Xowd_db_file search_db = wiki.Data_mgr__core_mgr().Db__search();
+ Xowd_db_file search_db = wiki.Data__core_mgr().Db__search();
Xoa_app_.Usr_dlg().Prog_many("", "", "search started (please wait)");
Xows_db_matcher matcher = cache.Matcher();
if (matcher == null) {
@@ -35,7 +35,7 @@ class Xows_db_wkr {
}
// init
int rslts_wanted = qry.Itms_end() - qry.Itms_bgn();
- Xowd_db_file core_db = wiki.Data_mgr__core_mgr().Db__core();
+ Xowd_db_file core_db = wiki.Data__core_mgr().Db__core();
Xowd_page_tbl page_tbl = core_db.Tbl__page();
Xowd_search_link_tbl link_tbl = search_db.Tbl__search_link();
Xows_db_word[] word_ary = cache.Words(); int word_ary_len = word_ary.length;
diff --git a/400_xowa/src/gplx/xowa/specials/search/Xows_paging_parser.java b/400_xowa/src/gplx/xowa/specials/search/Xows_paging_parser.java
index 7eb95048c..fc7e23653 100644
--- a/400_xowa/src/gplx/xowa/specials/search/Xows_paging_parser.java
+++ b/400_xowa/src/gplx/xowa/specials/search/Xows_paging_parser.java
@@ -21,7 +21,7 @@ class Xows_paging_parser {
private final List_adp itm_list = List_adp_.new_();
private final Bry_rdr rdr = new Bry_rdr();
public Xows_paging_itm[] Parse(byte[] raw) { // EX: en.wikipedia.org|41|60;en.wiktionary.org|21|40;
- rdr.Src_(raw);
+ rdr.Init(raw);
while (!rdr.Pos_is_eos()) {
byte[] wiki = rdr.Read_bry_to_pipe();
int bgn = rdr.Read_int_to_pipe();
diff --git a/400_xowa/src/gplx/xowa/specials/xowa/file_browsers/Xosp_fbrow_cmd__base.java b/400_xowa/src/gplx/xowa/specials/xowa/file_browsers/Xosp_fbrow_cmd__base.java
index 316f3f420..08bfadbc7 100644
--- a/400_xowa/src/gplx/xowa/specials/xowa/file_browsers/Xosp_fbrow_cmd__base.java
+++ b/400_xowa/src/gplx/xowa/specials/xowa/file_browsers/Xosp_fbrow_cmd__base.java
@@ -86,7 +86,7 @@ abstract class Xosp_fbrow_cmd__base implements Xosp_fbrow_cmd {
, " "
, " "
@@ -183,7 +183,7 @@ class Xosp_fbrow_cmd__wiki_add extends Xosp_fbrow_cmd__base {
@Override public Xosp_fbrow_cmd Make_new() {return new Xosp_fbrow_cmd__wiki_add();}
@Override protected void Process_itm(Xosp_fbrow_data_sub itm) {
byte[] url_bry = itm.Url().RawBry();
- if (!Bry_.HasAtEnd(url_bry, Ext_xowa)) itm.Selectable_(false);
+ if (!Bry_.Has_at_end(url_bry, Ext_xowa)) itm.Selectable_(false);
}
@Override protected Xosp_fbrow_rslt Write_html_selected(Xoa_url_arg_mgr arg_mgr, String selected, GfoInvkAble select_invkable) {
String[] wikis = String_.Split(selected, ";");
diff --git a/400_xowa/src/gplx/xowa/specials/xowa/file_browsers/Xosp_fbrow_data_dir.java b/400_xowa/src/gplx/xowa/specials/xowa/file_browsers/Xosp_fbrow_data_dir.java
index 2620b4c6e..66c67acc4 100644
--- a/400_xowa/src/gplx/xowa/specials/xowa/file_browsers/Xosp_fbrow_data_dir.java
+++ b/400_xowa/src/gplx/xowa/specials/xowa/file_browsers/Xosp_fbrow_data_dir.java
@@ -35,7 +35,7 @@ class Xosp_fbrow_data_dir {
for (int i = 0; i < len; ++i) {
IoItm_base src = (IoItm_base)itms.Get_at(i);
Io_url src_url = src.Url();
- if (String_.HasAtBgn(src_url.NameAndExt(), ".")) continue; // ignore hidden "." files; NameAndExt() b/c ".ext" has NameOnly of ""; EX: "/dir/.hidden"
+ if (String_.Has_at_bgn(src_url.NameAndExt(), ".")) continue; // ignore hidden "." files; NameAndExt() b/c ".ext" has NameOnly of ""; EX: "/dir/.hidden"
Xosp_fbrow_data_sub trg = null;
if (dir)
trg = new Xosp_fbrow_data_sub(src_url, -1, null);
diff --git a/400_xowa/src/gplx/xowa/specials/xowa/file_browsers/Xosp_fbrow_special_tst.java b/400_xowa/src/gplx/xowa/specials/xowa/file_browsers/Xosp_fbrow_special_tst.java
index 9b00ad4a4..c1c6d36b4 100644
--- a/400_xowa/src/gplx/xowa/specials/xowa/file_browsers/Xosp_fbrow_special_tst.java
+++ b/400_xowa/src/gplx/xowa/specials/xowa/file_browsers/Xosp_fbrow_special_tst.java
@@ -27,7 +27,7 @@ public class Xosp_fbrow_special_tst {
, " | "
, " "
diff --git a/400_xowa/src/gplx/xowa/users/data/Xou_db_file.java b/400_xowa/src/gplx/xowa/users/data/Xou_db_file.java
index 40e74ea0b..aa972c0f6 100644
--- a/400_xowa/src/gplx/xowa/users/data/Xou_db_file.java
+++ b/400_xowa/src/gplx/xowa/users/data/Xou_db_file.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.users.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*;
-import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.dbs.schemas.*;
+import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.dbs.metas.*;
import gplx.xowa.files.caches.*;
public class Xou_db_file {
private final Db_conn conn;
@@ -34,11 +34,11 @@ public class Xou_db_file {
public Xou_cache_tbl Tbl__cache() {return tbl__cache;} private final Xou_cache_tbl tbl__cache;
public Xoud_bmk_tbl Tbl__bmk() {return tbl__bmk;} private final Xoud_bmk_tbl tbl__bmk;
public void Init_assert() {
- if (!conn.Schema_tbl_exists(tbl__cache.Tbl_name())) {
+ if (!conn.Meta_tbl_exists(tbl__cache.Tbl_name())) {
tbl__cfg.Create_tbl();
tbl__cache.Create_tbl();
}
-// if (!conn.Schema_tbl_exists(tbl__bmk.Tbl_name())) {
+// if (!conn.Meta_tbl_exists(tbl__bmk.Tbl_name())) {
// tbl__bmk.Create_tbl();
// }
}
diff --git a/400_xowa/src/gplx/xowa/users/data/Xou_db_mgr.java b/400_xowa/src/gplx/xowa/users/data/Xou_db_mgr.java
index 5edd49769..0ccd9ffce 100644
--- a/400_xowa/src/gplx/xowa/users/data/Xou_db_mgr.java
+++ b/400_xowa/src/gplx/xowa/users/data/Xou_db_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.users.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*;
-import gplx.core.threads.*; import gplx.dbs.*; import gplx.dbs.schemas.updates.*; import gplx.dbs.schemas.*;
+import gplx.core.threads.*; import gplx.dbs.*; import gplx.dbs.metas.updates.*; import gplx.dbs.metas.*;
import gplx.xowa.files.caches.*;
public class Xou_db_mgr {
private final Xoa_app app;
diff --git a/400_xowa/src/gplx/xowa/users/data/Xoud_history_tbl.java b/400_xowa/src/gplx/xowa/users/data/Xoud_history_tbl.java
index f6235ad21..309b6ebc7 100644
--- a/400_xowa/src/gplx/xowa/users/data/Xoud_history_tbl.java
+++ b/400_xowa/src/gplx/xowa/users/data/Xoud_history_tbl.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.users.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*;
-import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.dbs.schemas.*; import gplx.dbs.schemas.updates.*;
+import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.dbs.metas.*; import gplx.dbs.metas.updates.*;
public class Xoud_history_tbl implements RlsAble {
private final String tbl_name = "user_history"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
private final String fld_wiki, fld_page, fld_qarg, fld_time, fld_count;
diff --git a/400_xowa/src/gplx/xowa/users/data/Xoud_regy_tbl.java b/400_xowa/src/gplx/xowa/users/data/Xoud_regy_tbl.java
index 7b523f13a..25b9fd4f7 100644
--- a/400_xowa/src/gplx/xowa/users/data/Xoud_regy_tbl.java
+++ b/400_xowa/src/gplx/xowa/users/data/Xoud_regy_tbl.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.users.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*;
-import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.dbs.schemas.*; import gplx.dbs.schemas.updates.*;
+import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.dbs.metas.*; import gplx.dbs.metas.updates.*;
public class Xoud_regy_tbl {
public static final String Tbl_name = "user_regy", Fld_regy_grp = "regy_grp", Fld_regy_key = "regy_key", Fld_regy_val = "regy_val";
private static final String[] Flds__all = new String[] {Fld_regy_grp, Fld_regy_key, Fld_regy_val};
@@ -68,10 +68,10 @@ public class Xoud_regy_tbl {
@gplx.Virtual public String Select_val(String grp, String key) {
if (stmt_select_key == null) stmt_select_key = Db_stmt_.new_select_as_rdr(conn, Db_qry__select_in_tbl.new_(Tbl_name, String_.Ary(Fld_regy_grp, Fld_regy_key), Flds__all, Db_qry__select_in_tbl.Order_by_null));
try {
- Db_rdr rdr = stmt_select_key.Clear().Val_str(grp).Val_str(key).Exec_select__rls_manual();
+ Db_rdr rdr = stmt_select_key.Clear().Val_str(Fld_regy_grp, grp).Val_str(Fld_regy_key, key).Exec_select__rls_manual();
String rv = null;
if (rdr.Move_next())
- rv = rdr.Read_str(2);
+ rv = rdr.Read_str(Fld_regy_val);
rdr.Rls();
return rv;
}
@@ -79,9 +79,9 @@ public class Xoud_regy_tbl {
}
private Xoud_regy_row Make_row(Db_rdr rdr) {
return new Xoud_regy_row
- ( rdr.Read_str(0)
- , rdr.Read_str(1)
- , rdr.Read_str(2)
+ ( rdr.Read_str(Fld_regy_grp)
+ , rdr.Read_str(Fld_regy_key)
+ , rdr.Read_str(Fld_regy_val)
);
}
public void Rls_all() {
diff --git a/400_xowa/src/gplx/xowa/users/prefs/Prefs_mgr.java b/400_xowa/src/gplx/xowa/users/prefs/Prefs_mgr.java
index da21ef342..79f0851fb 100644
--- a/400_xowa/src/gplx/xowa/users/prefs/Prefs_mgr.java
+++ b/400_xowa/src/gplx/xowa/users/prefs/Prefs_mgr.java
@@ -133,7 +133,7 @@ public class Prefs_mgr implements GfoInvkAble {
return // if tidy_enabled and text_area and ends with \n, then remove \n; DATE:2014-06-21
( tidy_enabled
&& elem_tid == Elem_tid_textarea
- && String_.HasAtEnd(val, "\n")
+ && String_.Has_at_end(val, "\n")
)
? String_.MidByLen(val, 0, String_.Len(val) - 1)
: val
diff --git a/400_xowa/src/gplx/xowa/users/wikis/Xofs_url_itm_parser.java b/400_xowa/src/gplx/xowa/users/wikis/Xofs_url_itm_parser.java
index a66044640..37c691d5e 100644
--- a/400_xowa/src/gplx/xowa/users/wikis/Xofs_url_itm_parser.java
+++ b/400_xowa/src/gplx/xowa/users/wikis/Xofs_url_itm_parser.java
@@ -35,7 +35,7 @@ class Xofs_url_itm_parser {
public void Parse(Xofs_url_itm itm, String raw_str) {
itm.Raw_(raw_str);
byte[] raw = Bry_.new_u8(raw_str);
- if (!Bry_.HasAtBgn(raw, Xowa_fs_protocol)) { // raw does not start with "xowa-fs://"; mark as custom str and exit
+ if (!Bry_.Has_at_bgn(raw, Xowa_fs_protocol)) { // raw does not start with "xowa-fs://"; mark as custom str and exit
itm.Tid_is_xowa_(false);
itm.Url_(raw_str);
return;
diff --git a/400_xowa/src/gplx/xowa/wikis/Xoa_wiki_mgr.java b/400_xowa/src/gplx/xowa/wikis/Xoa_wiki_mgr.java
index 6c84e6de3..a8fa97a2f 100644
--- a/400_xowa/src/gplx/xowa/wikis/Xoa_wiki_mgr.java
+++ b/400_xowa/src/gplx/xowa/wikis/Xoa_wiki_mgr.java
@@ -17,5 +17,6 @@ along with this program. If not, see .
*/
package gplx.xowa.wikis; import gplx.*; import gplx.xowa.*;
public interface Xoa_wiki_mgr {
- Xow_wiki Get_by_key_or_make_2(byte[] key);
+ Xow_wiki Get_by_key_or_make_2(byte[] key);
+ Xow_wiki Get_by_key_or_make_3(byte[] key);
}
diff --git a/400_xowa/src/gplx/xowa/wikis/Xoa_wiki_regy.java b/400_xowa/src/gplx/xowa/wikis/Xoa_wiki_regy.java
index 1df51ce24..ee7b4d544 100644
--- a/400_xowa/src/gplx/xowa/wikis/Xoa_wiki_regy.java
+++ b/400_xowa/src/gplx/xowa/wikis/Xoa_wiki_regy.java
@@ -24,8 +24,8 @@ public class Xoa_wiki_regy {
public boolean Has(byte[] domain) {if (init_needed) Init(); return hash.Has(domain);}
public boolean Url_is_invalid_domain(Xoa_url url) {
if (!Bry_.Eq(url.Page_bry(), Xoa_page_.Main_page_bry)) return false; // page is not "Main_Page"; assume not an invalid domain str; EX: "uk/wiki/Main_Page"
- if ( Bry_.Eq(Xow_domain_type_.Key_bry_home, url.Wiki_bry()) // wiki is "home"
- && !Bry_.Eq(Xow_domain_type_.Key_bry_home, url.Raw())) // raw is "home"; should be "home/wiki/Main_Page"; DATE:2014-02-09
+ if ( Bry_.Eq(Xow_domain_type_.Key_bry_home, url.Wiki_bry()) // wiki is "home"
+ && !Bry_.Eq(Xow_domain_type_.Key_bry_home, url.Raw())) // raw is "home"; should be "home/wiki/Main_Page"; DATE:2014-02-09
return false; // special case to handle "home" which should mean "home" in any wiki, but "home/wiki/Main_Page" in home wiki
return !this.Has(url.Wiki_bry());
}
diff --git a/400_xowa/src/gplx/xowa/wikis/Xoae_wiki_mgr.java b/400_xowa/src/gplx/xowa/wikis/Xoae_wiki_mgr.java
index 1a4c86166..b74ddb302 100644
--- a/400_xowa/src/gplx/xowa/wikis/Xoae_wiki_mgr.java
+++ b/400_xowa/src/gplx/xowa/wikis/Xoae_wiki_mgr.java
@@ -43,6 +43,7 @@ public class Xoae_wiki_mgr implements Xoa_wiki_mgr, GfoInvkAble {
rv.Init_assert();
return rv;
}
+ public Xow_wiki Get_by_key_or_make_3(byte[] key) {return Get_by_key_or_make(key);}
public Xowe_wiki Get_by_key_or_make(byte[] key) {
Xowe_wiki rv = this.Get_by_key_or_null(key);
if (rv == null) rv = New_wiki(key);
diff --git a/400_xowa/src/gplx/xowa/wikis/Xow_cfg_consts.java b/400_xowa/src/gplx/xowa/wikis/Xow_cfg_consts.java
index 9c2465656..7989e5236 100644
--- a/400_xowa/src/gplx/xowa/wikis/Xow_cfg_consts.java
+++ b/400_xowa/src/gplx/xowa/wikis/Xow_cfg_consts.java
@@ -23,6 +23,7 @@ public class Xow_cfg_consts {
, Grp__bldr_session = "xowa.bldr.session"
, Grp__bldr_db = "xowa.bldr.db"
, Grp__bldr_fsdb = "xowa.bldr.fsdb"
- , Grp_wiki_init = "wiki.init"
+ , Grp__wiki_init = "wiki.init"
+ , Key__init__main_page = "props.main_page"
;
}
diff --git a/400_xowa/src/gplx/xowa/wikis/Xow_page_tid.java b/400_xowa/src/gplx/xowa/wikis/Xow_page_tid.java
index 22f7569d4..077ce7645 100644
--- a/400_xowa/src/gplx/xowa/wikis/Xow_page_tid.java
+++ b/400_xowa/src/gplx/xowa/wikis/Xow_page_tid.java
@@ -24,7 +24,7 @@ public class Xow_page_tid {
case Xow_ns_.Id_user:
return Identify_by_ttl(ttl);
case gplx.xowa.xtns.scribunto.Scrib_xtn_mgr.Ns_id_module:
- return (Bry_.HasAtEnd(ttl, Ext_doc))
+ return (Bry_.Has_at_end(ttl, Ext_doc))
? Tid_wikitext : Tid_lua;
default:
return Wdata_wiki_mgr.Wiki_page_is_json(wiki_tid, ns_id)
@@ -32,8 +32,8 @@ public class Xow_page_tid {
}
}
public static byte Identify_by_ttl(byte[] ttl) {
- if (Bry_.HasAtEnd(ttl, Ext_css)) return Tid_css;
- else if (Bry_.HasAtEnd(ttl, Ext_js)) return Tid_js;
+ if (Bry_.Has_at_end(ttl, Ext_css)) return Tid_css;
+ else if (Bry_.Has_at_end(ttl, Ext_js)) return Tid_js;
else return Tid_wikitext;
}
private static final byte[] Ext_js = Bry_.new_a7(".js"), Ext_css = Bry_.new_a7(".css"), Ext_doc= Bry_.new_a7("/doc");
diff --git a/400_xowa/src/gplx/xowa/wikis/data/Xowd_core_db_props.java b/400_xowa/src/gplx/xowa/wikis/data/Xowd_core_db_props.java
index dadd5ad7c..85721256e 100644
--- a/400_xowa/src/gplx/xowa/wikis/data/Xowd_core_db_props.java
+++ b/400_xowa/src/gplx/xowa/wikis/data/Xowd_core_db_props.java
@@ -17,7 +17,7 @@ along with this program. If not, see .
*/
package gplx.xowa.wikis.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*;
import gplx.ios.*; import gplx.dbs.*; import gplx.dbs.cfgs.*;
-import gplx.dbs.schemas.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.dbs.*;
+import gplx.dbs.metas.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.dbs.*;
public class Xowd_core_db_props {
public Xowd_core_db_props(int schema, Xowd_db_layout layout_text, Xowd_db_layout layout_html, Xowd_db_layout layout_file, byte zip_tid_text, byte zip_tid_html) {
this.schema = schema;
diff --git a/400_xowa/src/gplx/xowa/wikis/data/Xowd_core_mw_props.java b/400_xowa/src/gplx/xowa/wikis/data/Xowd_core_mw_props.java
new file mode 100644
index 000000000..d3e37b830
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/wikis/data/Xowd_core_mw_props.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.wikis.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*;
+import gplx.dbs.*; import gplx.dbs.cfgs.*;
+public class Xowd_core_mw_props {
+ public void Init_by_load(Db_cfg_tbl cfg_tbl) {
+ this.main_page = cfg_tbl.Select_bry_or(Xow_cfg_consts.Grp__wiki_init, Xow_cfg_consts.Key__init__main_page, null);
+ if (main_page == null) {
+ Xoa_app_.Usr_dlg().Warn_many("", "", "mw_props.load; main_page not found; conn=~{0}", cfg_tbl.Conn().Conn_info().Xto_api());
+ this.main_page = Main_page_default;
+ }
+ }
+ public byte[] Main_page() {return main_page;} private byte[] main_page = Main_page_default;
+ public void Main_page_(byte[] v) {this.main_page = v;}
+ private static final byte[] Main_page_default = Bry_.new_a7("Main_Page");
+}
diff --git a/400_xowa/src/gplx/xowa/wikis/data/Xowd_db_mgr.java b/400_xowa/src/gplx/xowa/wikis/data/Xowd_db_mgr.java
index 6f51d0c3c..8e943515e 100644
--- a/400_xowa/src/gplx/xowa/wikis/data/Xowd_db_mgr.java
+++ b/400_xowa/src/gplx/xowa/wikis/data/Xowd_db_mgr.java
@@ -23,6 +23,7 @@ public class Xowd_db_mgr {
private final Io_url wiki_root_dir; private final Xow_domain domain_itm;
public Xowd_db_mgr(Io_url wiki_root_dir, Xow_domain domain_itm) {this.wiki_root_dir = wiki_root_dir; this.domain_itm = domain_itm;}
public Xowd_core_db_props Props() {return props;} private Xowd_core_db_props props = Xowd_core_db_props.Test;
+ public Xowd_core_mw_props Mw_props() {return mw_props;} private final Xowd_core_mw_props mw_props = new Xowd_core_mw_props();
public Db_cfg_tbl Tbl__cfg() {return db__core.Tbl__cfg();}
public Xowd_page_tbl Tbl__page() {return db__core.Tbl__page();}
public Xowd_db_file Db__core() {return db__core;} private Xowd_db_file db__core;
@@ -69,6 +70,7 @@ public class Xowd_db_mgr {
Dbs__set_by_tid(db);
db_file_hash.Add_or_new(db);
}
+ mw_props.Init_by_load(Tbl__cfg());
}
public void Init_by_make(Xowd_core_db_props props, Xob_info_session info_session) {
this.props = props;
diff --git a/400_xowa/src/gplx/xowa/wikis/data/tbls/Xowd_page_tbl.java b/400_xowa/src/gplx/xowa/wikis/data/tbls/Xowd_page_tbl.java
index cee778833..26e2af975 100644
--- a/400_xowa/src/gplx/xowa/wikis/data/tbls/Xowd_page_tbl.java
+++ b/400_xowa/src/gplx/xowa/wikis/data/tbls/Xowd_page_tbl.java
@@ -225,7 +225,7 @@ public class Xowd_page_tbl implements RlsAble {
if (cancelable.Canceled()) return;
Xowd_page_itm page = new Xowd_page_itm();
Read_page__idx(page, rdr);
- if (max_val_check && !Bry_.HasAtBgn(page.Ttl_page_db(), key)) break;
+ if (max_val_check && !Bry_.Has_at_bgn(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 {
diff --git a/400_xowa/src/gplx/xowa/wikis/data/tbls/Xowd_site_stats_tbl.java b/400_xowa/src/gplx/xowa/wikis/data/tbls/Xowd_site_stats_tbl.java
index ff1b6b703..c884d4a8d 100644
--- a/400_xowa/src/gplx/xowa/wikis/data/tbls/Xowd_site_stats_tbl.java
+++ b/400_xowa/src/gplx/xowa/wikis/data/tbls/Xowd_site_stats_tbl.java
@@ -42,8 +42,8 @@ public class Xowd_site_stats_tbl {
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld_row_id).Crt_int(fld_row_id, Site_stats_row_id).Exec_select__rls_auto();
try {
if (rdr.Move_next()) {
- stats.NumArticles_ (rdr.Read_int(fld_good_articles));
- stats.NumPages_ (rdr.Read_int(fld_total_pages));
+ stats.NumArticles_ ((int)rdr.Read_long(fld_good_articles)); // #<>(int)rdr.Read_long~rdr.Read_int
+ stats.NumPages_ ((int)rdr.Read_long(fld_total_pages)); // #<>(int)rdr.Read_long~rdr.Read_int
stats.NumFiles_ (rdr.Read_int(fld_images));
}
} finally {rdr.Rls();}
diff --git a/400_xowa/src/gplx/xowa/wikis/domains/crts/Xow_domain_crt_itm_parser.java b/400_xowa/src/gplx/xowa/wikis/domains/crts/Xow_domain_crt_itm_parser.java
index e5d786085..ed459c314 100644
--- a/400_xowa/src/gplx/xowa/wikis/domains/crts/Xow_domain_crt_itm_parser.java
+++ b/400_xowa/src/gplx/xowa/wikis/domains/crts/Xow_domain_crt_itm_parser.java
@@ -69,11 +69,11 @@ class Xow_domain_crt_itm_parser {
public Xow_domain_crt_itm Parse_itm(byte[] raw) {
Xow_domain_crt_itm rv = (Xow_domain_crt_itm)itm_hash.Get_by_bry(raw); if (rv != null) return rv; // singleton; EX: , , etc..
int raw_len = raw.length;
- if (Bry_.HasAtBgn(raw, Wild_lang)) { // EX: *.wikipedia
+ if (Bry_.Has_at_bgn(raw, Wild_lang)) { // EX: *.wikipedia
int wiki_tid = Xow_domain_type_.Get_type_as_tid(raw, Wild_lang.length, raw_len);
return wiki_tid == Xow_domain_type_.Tid_null ? Xow_domain_crt_itm_.Null : new Xow_domain_crt_itm__type(wiki_tid);
}
- else if (Bry_.HasAtEnd(raw, Wild_type)) { // EX: en.*
+ else if (Bry_.Has_at_end(raw, Wild_type)) { // EX: en.*
Xol_lang_itm lang_itm = Xol_lang_itm_.Get_by_key(raw, 0, raw_len - Wild_type.length);
return lang_itm == null ? Xow_domain_crt_itm_.Null : new Xow_domain_crt_itm__lang(lang_itm.Id());
}
diff --git a/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_lang_mgr.java b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_lang_mgr.java
index 71490e34c..9d65867cc 100644
--- a/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_lang_mgr.java
+++ b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_lang_mgr.java
@@ -140,7 +140,7 @@ class Xow_lang_html implements Bry_fmtr_arg {
byte[] local_name = itm.Lang_name();
byte[] badge_cls = Badge_cls(tmp_bfr, itm.Page_badges());
if (wiki.Appe().Usere().Wiki().Xwiki_mgr().Get_by_key(domain) == null)
- tmp_bfr.Add(Xoh_href_parser.Href_http_bry).Add(domain).Add(Xoh_href_parser.Href_wiki_bry);
+ tmp_bfr.Add(Xoh_href_parser.Href_https_bry).Add(domain).Add(Xoh_href_parser.Href_wiki_bry);
else
tmp_bfr.Add(Xoh_href_parser.Href_site_bry).Add(domain).Add(Xoh_href_parser.Href_wiki_bry);
if (!itm.Empty_xwiki()) tmp_bfr.Add(page_name);
diff --git a/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_lang_mgr_tst.java b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_lang_mgr_tst.java
index 2e734c612..ab2a38a0c 100644
--- a/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_lang_mgr_tst.java
+++ b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_lang_mgr_tst.java
@@ -68,7 +68,7 @@ public class Xow_lang_mgr_tst {
, " grp1"
, " "
, " "
- , " Chinese | Earth | | "
+ , " Chinese | Earth | | "
, " "
, " "
, " "
diff --git a/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr.java b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr.java
index 5408e614d..738730007 100644
--- a/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr.java
+++ b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr.java
@@ -90,7 +90,7 @@ public class Xow_xwiki_mgr implements GfoInvkAble {
&& Bry_.Eq(alias, lang_itm.Key())) // alias == lang.key; only assign langs to aliases that have lang key; EX: w|en.wikipedia.org; "w" alias should not be registered for "en"; DATE:2013-07-25
lang_id = lang_itm.Id();
}
- byte[] url_fmt = Bry_.Add(Xoh_href_parser.Href_http_bry, domain_bry, Xoh_href_parser.Href_wiki_bry, Arg_0);
+ byte[] url_fmt = Bry_.Add(Xoh_href_parser.Href_https_bry, domain_bry, Xoh_href_parser.Href_wiki_bry, Arg_0);
return Xow_xwiki_itm.new_(alias, url_fmt, lang_id, domain.Domain_tid(), domain_bry);
} static final byte[] Arg_0 = Bry_.new_a7("~{0}");
String Exec_itms_print(byte[] raw) {
diff --git a/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr_tst.java b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr_tst.java
index 8ea358b70..055e9d6b1 100644
--- a/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr_tst.java
+++ b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr_tst.java
@@ -19,11 +19,11 @@ package gplx.xowa.wikis.xwikis; import gplx.*; import gplx.xowa.*; import gplx.x
import org.junit.*; import gplx.core.strings.*; import gplx.xowa.wikis.*; import gplx.xowa.langs.*;
public class Xow_xwiki_mgr_tst {
@Before public void init() {fxt.Clear();} private Xow_xwiki_mgr_fxt fxt = new Xow_xwiki_mgr_fxt();
- @Test public void Add_bulk_wiki_en() {fxt.Test_add_bulk("w|en.wikipedia.org" , Xol_lang_itm_.Id__unknown , Xow_domain_type_.Tid_wikipedia , "w" , "http://en.wikipedia.org/wiki/~{0}", "en.wikipedia.org");}
- @Test public void Add_bulk_wiki_fr() {fxt.Test_add_bulk("fr|fr.wikipedia.org" , Xol_lang_itm_.Id_fr , Xow_domain_type_.Tid_wikipedia , "fr" , "http://fr.wikipedia.org/wiki/~{0}", "fr.wikipedia.org");}
- @Test public void Add_bulk_wikt_en() {fxt.Test_add_bulk("wikt|en.wiktionary.org" , Xol_lang_itm_.Id__unknown , Xow_domain_type_.Tid_wiktionary , "wikt" , "http://en.wiktionary.org/wiki/~{0}", "en.wiktionary.org");}
- @Test public void Add_bulk_commons() {fxt.Test_add_bulk("commons|commons.wikimedia.org" , Xol_lang_itm_.Id__unknown , Xow_domain_type_.Tid_commons , "commons" , "http://commons.wikimedia.org/wiki/~{0}", "commons.wikimedia.org");}
- @Test public void Add_bulk_commons_cap() {fxt.Test_add_bulk("Commons|commons.wikimedia.org" , Xol_lang_itm_.Id__unknown , Xow_domain_type_.Tid_commons , "Commons" , "http://commons.wikimedia.org/wiki/~{0}", "commons.wikimedia.org");}
+ @Test public void Add_bulk_wiki_en() {fxt.Test_add_bulk("w|en.wikipedia.org" , Xol_lang_itm_.Id__unknown , Xow_domain_type_.Tid_wikipedia , "w" , "https://en.wikipedia.org/wiki/~{0}", "en.wikipedia.org");}
+ @Test public void Add_bulk_wiki_fr() {fxt.Test_add_bulk("fr|fr.wikipedia.org" , Xol_lang_itm_.Id_fr , Xow_domain_type_.Tid_wikipedia , "fr" , "https://fr.wikipedia.org/wiki/~{0}", "fr.wikipedia.org");}
+ @Test public void Add_bulk_wikt_en() {fxt.Test_add_bulk("wikt|en.wiktionary.org" , Xol_lang_itm_.Id__unknown , Xow_domain_type_.Tid_wiktionary , "wikt" , "https://en.wiktionary.org/wiki/~{0}", "en.wiktionary.org");}
+ @Test public void Add_bulk_commons() {fxt.Test_add_bulk("commons|commons.wikimedia.org" , Xol_lang_itm_.Id__unknown , Xow_domain_type_.Tid_commons , "commons" , "https://commons.wikimedia.org/wiki/~{0}", "commons.wikimedia.org");}
+ @Test public void Add_bulk_commons_cap() {fxt.Test_add_bulk("Commons|commons.wikimedia.org" , Xol_lang_itm_.Id__unknown , Xow_domain_type_.Tid_commons , "Commons" , "https://commons.wikimedia.org/wiki/~{0}", "commons.wikimedia.org");}
@Test public void Add_bulk_langs_wiki() {fxt.Init_langs().Test_add_bulk_langs("wiki", fxt.xwiki_("en", "en.wikipedia.org", "http://en.wikipedia.org/wiki/~{0}"), fxt.xwiki_("de", "de.wikipedia.org", "http://de.wikipedia.org/wiki/~{0}"), fxt.xwiki_("fr", "fr.wikipedia.org", "http://fr.wikipedia.org/wiki/~{0}"), fxt.xwiki_("ja", "ja.wikipedia.org", "http://ja.wikipedia.org/wiki/~{0}"));}
@Test public void Add_bulk_langs_grps() {fxt.Init_langs().Test_add_bulk_langs("europe_west~asia_east", fxt.xwiki_("de", "de.wikipedia.org", "http://de.wikipedia.org/wiki/~{0}"), fxt.xwiki_("fr", "fr.wikipedia.org", "http://fr.wikipedia.org/wiki/~{0}"), fxt.xwiki_("ja", "ja.wikipedia.org", "http://ja.wikipedia.org/wiki/~{0}"));}
@Test public void Add_bulk_langs_grp_itm() {fxt.Init_langs().Test_add_bulk_langs("europe_west~ja", fxt.xwiki_("de", "de.wikipedia.org", "http://de.wikipedia.org/wiki/~{0}"), fxt.xwiki_("fr", "fr.wikipedia.org", "http://fr.wikipedia.org/wiki/~{0}"), fxt.xwiki_("ja", "ja.wikipedia.org", "http://ja.wikipedia.org/wiki/~{0}"));}
diff --git a/400_xowa/src/gplx/xowa/wmfs/apis/Xoapi_orig_base_tst.java b/400_xowa/src/gplx/xowa/wmfs/apis/Xoapi_orig_base_tst.java
index 01f53d1ec..67334d9c3 100644
--- a/400_xowa/src/gplx/xowa/wmfs/apis/Xoapi_orig_base_tst.java
+++ b/400_xowa/src/gplx/xowa/wmfs/apis/Xoapi_orig_base_tst.java
@@ -21,11 +21,11 @@ public class Xoapi_orig_base_tst {
Xoapi_orig_base_fxt fxt = new Xoapi_orig_base_fxt();
@Before public void init() {fxt.Clear();}
@Test public void Bld_api_url() {
- fxt.Bld_api_url_tst("A.png" , 220, 110, "http://en.wikipedia.org/w/api.php?action=query&format=xml&prop=imageinfo&iiprop=size|url&redirects&titles=File:A.png&iiurlwidth=220&iiurlheight=110");
- fxt.Bld_api_url_tst("A.png" , 220, 0, "http://en.wikipedia.org/w/api.php?action=query&format=xml&prop=imageinfo&iiprop=size|url&redirects&titles=File:A.png&iiurlwidth=220");
- fxt.Bld_api_url_tst("A.png" , 0, 110, "http://en.wikipedia.org/w/api.php?action=query&format=xml&prop=imageinfo&iiprop=size|url&redirects&titles=File:A.png"); // assert that null width does not write height
- fxt.Bld_api_url_tst("A b.png" , 220, 0, "http://en.wikipedia.org/w/api.php?action=query&format=xml&prop=imageinfo&iiprop=size|url&redirects&titles=File:A_b.png&iiurlwidth=220");
- fxt.Bld_api_url_tst("A&b.png" , 220, 0, "http://en.wikipedia.org/w/api.php?action=query&format=xml&prop=imageinfo&iiprop=size|url&redirects&titles=File:A%26b.png&iiurlwidth=220");
+ fxt.Bld_api_url_tst("A.png" , 220, 110, "https://en.wikipedia.org/w/api.php?action=query&format=xml&prop=imageinfo&iiprop=size|url&redirects&titles=File:A.png&iiurlwidth=220&iiurlheight=110");
+ fxt.Bld_api_url_tst("A.png" , 220, 0, "https://en.wikipedia.org/w/api.php?action=query&format=xml&prop=imageinfo&iiprop=size|url&redirects&titles=File:A.png&iiurlwidth=220");
+ fxt.Bld_api_url_tst("A.png" , 0, 110, "https://en.wikipedia.org/w/api.php?action=query&format=xml&prop=imageinfo&iiprop=size|url&redirects&titles=File:A.png"); // assert that null width does not write height
+ fxt.Bld_api_url_tst("A b.png" , 220, 0, "https://en.wikipedia.org/w/api.php?action=query&format=xml&prop=imageinfo&iiprop=size|url&redirects&titles=File:A_b.png&iiurlwidth=220");
+ fxt.Bld_api_url_tst("A&b.png" , 220, 0, "https://en.wikipedia.org/w/api.php?action=query&format=xml&prop=imageinfo&iiprop=size|url&redirects&titles=File:A%26b.png&iiurlwidth=220");
}
@Test public void Parse_size() {
String raw = "";
diff --git a/400_xowa/src/gplx/xowa/wmfs/apis/Xoapi_orig_wmf.java b/400_xowa/src/gplx/xowa/wmfs/apis/Xoapi_orig_wmf.java
index 3f68b1858..3e9384cee 100644
--- a/400_xowa/src/gplx/xowa/wmfs/apis/Xoapi_orig_wmf.java
+++ b/400_xowa/src/gplx/xowa/wmfs/apis/Xoapi_orig_wmf.java
@@ -67,7 +67,7 @@ public class Xoapi_orig_wmf extends Xoapi_orig_base {
}
public static String Bld_api_url(byte[] wiki_key, byte[] ttl, int width, int height) {
synchronized (tmp_bfr) {
- tmp_bfr.Add(Xoh_href_parser.Href_http_bry) // "http://"
+ tmp_bfr.Add(Xoh_href_parser.Href_https_bry) // "https://"
.Add(wiki_key) // "commons.wikimedia.org"
.Add(Bry_api) // "/w/api.php?action=query&format=xml&prop=imageinfo&iiprop=size|url&titles=File:"
.Add(tmp_encoder.Encode(ttl)) // "A%20B.png"
diff --git a/400_xowa/src/gplx/xowa/xtns/dynamicPageList/Dpl_itm.java b/400_xowa/src/gplx/xowa/xtns/dynamicPageList/Dpl_itm.java
index 18ee9aa64..9db099cfd 100644
--- a/400_xowa/src/gplx/xowa/xtns/dynamicPageList/Dpl_itm.java
+++ b/400_xowa/src/gplx/xowa/xtns/dynamicPageList/Dpl_itm.java
@@ -140,7 +140,7 @@ class Dpl_itm {
byte[] key_bry = Bry_.Mid(src, fld_bgn, fld_end);
boolean log =
( Known_invalid_keys.Get_by_mid(src, fld_bgn, fld_end) != null
- || Bry_.HasAtBgn(key_bry, Html_tag_.Comm_bgn) // ignore comment-like keys; EX: will have key of " will have key of " |