mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
v2.1.4.1
This commit is contained in:
@@ -62,6 +62,44 @@ public class Bit_ {
|
||||
v = factor == 0 ? v : (v % factor); // NOTE: if 0, do not do modulus or else div by zero
|
||||
}
|
||||
}
|
||||
public static byte Xto_byte(byte[] pow_ary, byte... val_ary) {
|
||||
int pow_ary_last = pow_ary.length - 1;
|
||||
int val = 0;
|
||||
for (int i = pow_ary_last; i > -1; --i)
|
||||
val += pow_ary[i] * val_ary[i];
|
||||
return (byte)val;
|
||||
}
|
||||
public static void Xto_bry(byte[] rv, byte[] pow_ary, byte val) {
|
||||
int pow_ary_len = pow_ary.length;
|
||||
int rv_len = rv.length;
|
||||
for (int i = 0; i < pow_ary_len; i++) {
|
||||
if (i >= rv_len) break;
|
||||
rv[i] = (byte)(val / pow_ary[i]);
|
||||
int factor = pow_ary[i] * rv[i];
|
||||
val = (byte)(factor == 0 ? val : (val % factor)); // NOTE: if 0, do not do modulus or else div by zero
|
||||
}
|
||||
}
|
||||
public static int Shift_lhs(int val, int shift) {return val << shift;}
|
||||
public static int Shift_rhs(int val, int shift) {return val >> shift;}
|
||||
public static int Shift_lhs_to_int(int[] shift_ary, int... val_ary) {
|
||||
int val_len = val_ary.length; if (val_len > shift_ary.length) throw Err_.new_("vals must be less than shifts; vals={0} shifts=~{1}");
|
||||
int rv = 0;
|
||||
for (int i = 0; i < val_len; ++i) {
|
||||
int val = val_ary[i];
|
||||
int shift = shift_ary[i];
|
||||
rv += val << shift;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
public static void Shift_rhs_to_ary(int[] rv, int[] shift_ary, int val) {
|
||||
int shift_len = shift_ary.length;
|
||||
for (int i = shift_len - 1; i > - 1; --i) {
|
||||
int shift = shift_ary[i];
|
||||
int itm = val >> shift;
|
||||
rv[i] = itm;
|
||||
val -= (itm << shift);
|
||||
}
|
||||
}
|
||||
public static int Xto_int_date_short(int[] val_ary) {
|
||||
val_ary[0] -= 1900;
|
||||
return Xto_int(Pow_ary_date_short, val_ary);
|
||||
|
||||
@@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.core.brys; import gplx.*; import gplx.core.*;
|
||||
import org.junit.*;
|
||||
public class Bit__tst {
|
||||
@Before public void init() {fxt.Clear();} private Bit__fxt fxt = new Bit__fxt();
|
||||
@Test public void XtoBitStr() {
|
||||
tst_XtoBitStr( 0, "00000000");
|
||||
tst_XtoBitStr( 1, "00000001");
|
||||
@@ -66,4 +67,43 @@ public class Bit__tst {
|
||||
Tfds.Eq(expd, date_int);
|
||||
Tfds.Eq(date_str, Bit_.Xto_date_short(date_int).XtoStr_fmt("yyyyMMdd HHmm"));
|
||||
}
|
||||
@Test public void Shift_lhs() {// simple: shift 1 bit
|
||||
fxt.Test_shift_lhs(1, 1, 2);
|
||||
fxt.Test_shift_lhs(2, 1, 4);
|
||||
fxt.Test_shift_lhs(3, 1, 6);
|
||||
fxt.Test_shift_lhs(4, 1, 8);
|
||||
}
|
||||
@Test public void Shift_rhs() {
|
||||
fxt.Test_shift_rhs(2, 1, 1);
|
||||
fxt.Test_shift_rhs(4, 1, 2);
|
||||
fxt.Test_shift_rhs(6, 1, 3);
|
||||
fxt.Test_shift_rhs(8, 1, 4);
|
||||
}
|
||||
@Test public void Shift_lhs_to_int() {
|
||||
int[] shift_ary = Int_.Ary(0, 3, 5);
|
||||
fxt.Test_shift_lhs_to_int(shift_ary, Int_.Ary(0, 0, 0), 0);
|
||||
fxt.Test_shift_lhs_to_int(shift_ary, Int_.Ary(7, 0, 0), 7); // 1st 3 bits
|
||||
fxt.Test_shift_lhs_to_int(shift_ary, Int_.Ary(0, 3, 0), 24); // 2nd 2 bits
|
||||
fxt.Test_shift_lhs_to_int(shift_ary, Int_.Ary(0, 0, 1), 32); // 3rd 1 bit
|
||||
fxt.Test_shift_lhs_to_int(shift_ary, Int_.Ary(7, 3, 1), 63); // many bits
|
||||
}
|
||||
@Test public void Shift_rhs_to_ary() {
|
||||
int[] shift_ary = Int_.Ary(0, 3, 5);
|
||||
fxt.Test_shift_rhs_to_ary(shift_ary, 0, Int_.Ary(0, 0, 0));
|
||||
fxt.Test_shift_rhs_to_ary(shift_ary, 7, Int_.Ary(7, 0, 0)); // 1st 3 bits
|
||||
fxt.Test_shift_rhs_to_ary(shift_ary, 24, Int_.Ary(0, 3, 0)); // 2nd 2 bits
|
||||
fxt.Test_shift_rhs_to_ary(shift_ary, 32, Int_.Ary(0, 0, 1)); // 3rd 1 bit
|
||||
fxt.Test_shift_rhs_to_ary(shift_ary, 63, Int_.Ary(7, 3, 1)); // many bits
|
||||
}
|
||||
}
|
||||
class Bit__fxt {
|
||||
public void Clear() {}
|
||||
public void Test_shift_lhs(int val, int shift, int expd) {Tfds.Eq(expd, Bit_.Shift_lhs(val, shift));}
|
||||
public void Test_shift_rhs(int val, int shift, int expd) {Tfds.Eq(expd, Bit_.Shift_rhs(val, shift));}
|
||||
public void Test_shift_lhs_to_int(int[] shift_ary, int[] val_ary, int expd) {Tfds.Eq(expd, Bit_.Shift_lhs_to_int(shift_ary, val_ary));}
|
||||
public void Test_shift_rhs_to_ary(int[] shift_ary, int val, int[] expd_ary) {
|
||||
int[] actl_ary = Int_.Ary(0, 0, 0);
|
||||
Bit_.Shift_rhs_to_ary(actl_ary, shift_ary, val);
|
||||
Tfds.Eq_ary(expd_ary, actl_ary);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ public class Bry_rdr {
|
||||
public int Read_int_to_comma() {return Read_int_to(Byte_ascii.Comma);}
|
||||
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(byte to_char) {
|
||||
int bgn = pos;
|
||||
int rv = 0;
|
||||
@@ -61,6 +62,8 @@ public class Bry_rdr {
|
||||
}
|
||||
public byte[] Read_bry_to_nl() {return Read_bry_to(Byte_ascii.NewLine);}
|
||||
public byte[] Read_bry_to_pipe() {return Read_bry_to(Byte_ascii.Pipe);}
|
||||
public byte[] Read_bry_to_quote() {return Read_bry_to(Byte_ascii.Quote);}
|
||||
public byte[] Read_bry_to_apos() {return Read_bry_to(Byte_ascii.Apos);}
|
||||
public byte[] Read_bry_to(byte to_char) {
|
||||
int bgn = pos;
|
||||
while (pos < src_len) {
|
||||
|
||||
27
400_xowa/src/gplx/dbs/Gfdb_db_base.java
Normal file
27
400_xowa/src/gplx/dbs/Gfdb_db_base.java
Normal file
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.dbs; import gplx.*;
|
||||
import gplx.dbs.schemas.*;
|
||||
public class Gfdb_db_base {
|
||||
public Db_conn Conn() {return conn;} private Db_conn conn;
|
||||
public Schema_db_mgr Schema() {return schema;} private Schema_db_mgr schema = new Schema_db_mgr();
|
||||
public void Init(Db_conn conn) {
|
||||
this.conn = conn;
|
||||
schema.Init(conn);
|
||||
}
|
||||
}
|
||||
28
400_xowa/src/gplx/dbs/schemas/Schema_db_mgr.java
Normal file
28
400_xowa/src/gplx/dbs/schemas/Schema_db_mgr.java
Normal file
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.dbs.schemas; import gplx.*; import gplx.dbs.*;
|
||||
import gplx.dbs.schemas.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 void Init(Db_conn conn) {
|
||||
loader.Load(this, conn);
|
||||
updater.Update(this, conn);
|
||||
}
|
||||
}
|
||||
28
400_xowa/src/gplx/dbs/schemas/Schema_itm_tid.java
Normal file
28
400_xowa/src/gplx/dbs/schemas/Schema_itm_tid.java
Normal file
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.dbs.schemas; import gplx.*; import gplx.dbs.*;
|
||||
public class Schema_itm_tid {
|
||||
public static final int Tid_table = 1, Tid_index = 2;
|
||||
public static final String Key_table = "table", Key_index = "index";
|
||||
public static int Xto_int(String s) {
|
||||
s = String_.Lower(s);
|
||||
if (String_.Eq(s, Key_table)) return Tid_table;
|
||||
else if (String_.Eq(s, Key_index)) return Tid_index;
|
||||
else throw Err_.unhandled(s);
|
||||
}
|
||||
}
|
||||
21
400_xowa/src/gplx/dbs/schemas/Schema_loader_mgr.java
Normal file
21
400_xowa/src/gplx/dbs/schemas/Schema_loader_mgr.java
Normal file
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.dbs.schemas; import gplx.*; import gplx.dbs.*;
|
||||
public interface Schema_loader_mgr {
|
||||
void Load(Schema_db_mgr db_mgr, Db_conn conn);
|
||||
}
|
||||
47
400_xowa/src/gplx/dbs/schemas/Schema_loader_mgr_.java
Normal file
47
400_xowa/src/gplx/dbs/schemas/Schema_loader_mgr_.java
Normal file
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.dbs.schemas; import gplx.*; import gplx.dbs.*;
|
||||
public class Schema_loader_mgr_ {
|
||||
public static final Schema_loader_mgr Null = new Schema_loader_mgr__null();
|
||||
public static final Schema_loader_mgr Sqlite = new Schema_loader_mgr__sqlite();
|
||||
}
|
||||
class Schema_loader_mgr__null implements Schema_loader_mgr {
|
||||
public void Load(Schema_db_mgr db_mgr, Db_conn conn) {}
|
||||
}
|
||||
class Schema_loader_mgr__sqlite implements Schema_loader_mgr {
|
||||
public void Load(Schema_db_mgr db_mgr, Db_conn conn) {
|
||||
Gfo_usr_dlg_._.Log_many("", "", "db.schema.load.bgn: conn=~{0}", conn.Url().Xto_api());
|
||||
Schema_tbl_mgr tbl_mgr = db_mgr.Tbl_mgr();
|
||||
Db_qry__select_in_tbl qry = Db_qry__select_in_tbl.new_("sqlite_master", null, String_.Ary("type", "name", "sql"));
|
||||
Db_stmt stmt = Db_stmt_.new_select_as_rdr(conn, qry);
|
||||
Db_rdr rdr = stmt.Exec_select_as_rdr();
|
||||
while (rdr.Move_next()) {
|
||||
int type = Schema_itm_tid.Xto_int(rdr.Read_str(0));
|
||||
switch (type) {
|
||||
case Schema_itm_tid.Tid_table:
|
||||
Schema_tbl_itm tbl_itm = new Schema_tbl_itm(rdr.Read_str(1), rdr.Read_str(2));
|
||||
tbl_mgr.Add(tbl_itm);
|
||||
break;
|
||||
case Schema_itm_tid.Tid_index: break; // noop for now
|
||||
default: throw Err_.unhandled(type);
|
||||
}
|
||||
}
|
||||
rdr.Rls();
|
||||
Gfo_usr_dlg_._.Log_many("", "", "db.schema.load.end");
|
||||
}
|
||||
}
|
||||
23
400_xowa/src/gplx/dbs/schemas/Schema_tbl_itm.java
Normal file
23
400_xowa/src/gplx/dbs/schemas/Schema_tbl_itm.java
Normal file
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.dbs.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;}
|
||||
public String Name() {return name;} private final String name;
|
||||
public String Sql() {return sql;} private final String sql;
|
||||
}
|
||||
24
400_xowa/src/gplx/dbs/schemas/Schema_tbl_mgr.java
Normal file
24
400_xowa/src/gplx/dbs/schemas/Schema_tbl_mgr.java
Normal file
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.dbs.schemas; import gplx.*; import gplx.dbs.*;
|
||||
public class Schema_tbl_mgr {
|
||||
private OrderedHash hash = OrderedHash_.new_();
|
||||
public void Add(Schema_tbl_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.Fetch(name);}
|
||||
}
|
||||
23
400_xowa/src/gplx/dbs/schemas/updates/Schema_update_cmd.java
Normal file
23
400_xowa/src/gplx/dbs/schemas/updates/Schema_update_cmd.java
Normal file
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.dbs.schemas.updates; import gplx.*; import gplx.dbs.*; import gplx.dbs.schemas.*;
|
||||
public interface Schema_update_cmd {
|
||||
String Name();
|
||||
boolean Exec_is_done();
|
||||
void Exec(Schema_db_mgr mgr, Db_conn conn);
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.dbs.schemas.updates; import gplx.*; import gplx.dbs.*; import gplx.dbs.schemas.*;
|
||||
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);}
|
||||
}
|
||||
class Schema_update_cmd__tbl_create implements Schema_update_cmd {
|
||||
private final String tbl_sql; private final Db_idx_itm[] tbl_idxs;
|
||||
public Schema_update_cmd__tbl_create(String tbl_name, String tbl_sql, Db_idx_itm... tbl_idxs) {
|
||||
this.tbl_name = tbl_name; this.tbl_sql = tbl_sql; this.tbl_idxs = tbl_idxs;
|
||||
}
|
||||
public String Name() {return "schema.tbl.create." + tbl_name;} private final String tbl_name;
|
||||
public boolean Exec_is_done() {return exec_is_done;} private boolean exec_is_done;
|
||||
public void Exec(Schema_db_mgr db_mgr, Db_conn conn) {
|
||||
if (db_mgr.Tbl_mgr().Has(tbl_name)) return;
|
||||
Gfo_usr_dlg_._.Log_many("", "", "schema.tbl.create: tbl=~{0}", tbl_name);
|
||||
Sqlite_engine_.Tbl_create(conn, tbl_name, tbl_sql);
|
||||
Sqlite_engine_.Idx_create(conn, tbl_idxs);
|
||||
exec_is_done = true;
|
||||
}
|
||||
}
|
||||
32
400_xowa/src/gplx/dbs/schemas/updates/Schema_update_mgr.java
Normal file
32
400_xowa/src/gplx/dbs/schemas/updates/Schema_update_mgr.java
Normal file
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.dbs.schemas.updates; import gplx.*; import gplx.dbs.*; import gplx.dbs.schemas.*;
|
||||
public class Schema_update_mgr {
|
||||
private ListAdp cmds = ListAdp_.new_();
|
||||
public void Add(Schema_update_cmd cmd) {cmds.Add(cmd);}
|
||||
public void Update(Schema_db_mgr schema_mgr, Db_conn conn) {
|
||||
int cmds_len = cmds.Count();
|
||||
for (int i = 0; i < cmds_len; ++i) {
|
||||
Schema_update_cmd cmd = (Schema_update_cmd)cmds.FetchAt(i);
|
||||
try {cmd.Exec(schema_mgr, conn);}
|
||||
catch (Exception e) {
|
||||
Gfo_usr_dlg_._.Warn_many("", "", "failed to run update cmd; name=~{0} err=~{1}", cmd.Name(), Err_.Message_gplx_brief(e));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.dbs.schemas.updates; import gplx.*; import gplx.dbs.*; import gplx.dbs.schemas.*;
|
||||
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();
|
||||
@Test public void Create() {
|
||||
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.Test_exec_n(new Schema_update_cmd__mock());
|
||||
}
|
||||
}
|
||||
class Schema_update_mgr_fxt {
|
||||
private Schema_update_mgr update_mgr; private Schema_db_mgr db_mgr;
|
||||
public void Clear() {
|
||||
update_mgr = new Schema_update_mgr();
|
||||
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"));
|
||||
}
|
||||
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);}
|
||||
private void Test_exec(Schema_update_cmd cmd, boolean expd) {
|
||||
update_mgr.Add(cmd);
|
||||
update_mgr.Update(db_mgr, Db_conn_.Null);
|
||||
Tfds.Eq(expd, cmd.Exec_is_done());
|
||||
}
|
||||
}
|
||||
class Schema_update_cmd__mock implements Schema_update_cmd {
|
||||
public String Name() {return "xowa.user.cfg_regy.create";}
|
||||
public boolean Exec_is_done() {return exec_is_done;} private boolean exec_is_done;
|
||||
public void Exec(Schema_db_mgr mgr, Db_conn conn) {
|
||||
if (mgr.Tbl_mgr().Has(Tbl_name)) return;
|
||||
exec_is_done = true;
|
||||
}
|
||||
public static final String Tbl_name = "tbl_mock";
|
||||
}
|
||||
@@ -18,9 +18,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.fsdb; import gplx.*;
|
||||
import gplx.dbs.*; import gplx.ios.*;
|
||||
public class Fsdb_bin_tbl {
|
||||
public static void Create_table(Db_provider p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);}
|
||||
public static Db_stmt Insert_stmt(Db_provider p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_bin_owner_id, Fld_bin_owner_tid, Fld_bin_part_id, Fld_bin_data_url, Fld_bin_data);}
|
||||
public static void Insert_rdr(Db_provider p, int id, byte tid, long bin_len, Io_stream_rdr bin_rdr) {
|
||||
public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);}
|
||||
public static Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_bin_owner_id, Fld_bin_owner_tid, Fld_bin_part_id, Fld_bin_data_url, Fld_bin_data);}
|
||||
public static void Insert_rdr(Db_conn p, int id, byte tid, long bin_len, Io_stream_rdr bin_rdr) {
|
||||
Db_stmt stmt = Insert_stmt(p);
|
||||
try {Insert_rdr(stmt, id, tid, bin_len, bin_rdr);}
|
||||
finally {stmt.Rls();}
|
||||
@@ -28,33 +28,33 @@ public class Fsdb_bin_tbl {
|
||||
public static long Insert_rdr(Db_stmt stmt, int id, byte tid, long bin_len, Io_stream_rdr bin_rdr) {
|
||||
long rv = bin_len;
|
||||
stmt.Clear()
|
||||
.Val_int_(id)
|
||||
.Val_byte_(tid)
|
||||
.Val_int_(Null_part_id)
|
||||
.Val_str_(Null_data_url)
|
||||
.Val_int(id)
|
||||
.Val_byte(tid)
|
||||
.Val_int(Null_part_id)
|
||||
.Val_str(Null_data_url)
|
||||
;
|
||||
if (Sqlite_engine_.Supports_read_binary_stream)
|
||||
stmt.Val_rdr_(bin_rdr, bin_len);
|
||||
else {
|
||||
byte[] bin_ary = Io_stream_rdr_.Load_all_as_bry(Bry_bfr.new_(), bin_rdr);
|
||||
stmt.Val_bry_(bin_ary);
|
||||
stmt.Val_bry(bin_ary);
|
||||
rv = bin_ary.length;
|
||||
}
|
||||
stmt.Exec_insert();
|
||||
return rv;
|
||||
}
|
||||
public static void Delete(Db_provider p, int id) {
|
||||
public static void Delete(Db_conn p, int id) {
|
||||
Db_stmt stmt = Delete_stmt(p);
|
||||
try {Delete(stmt, id);}
|
||||
finally {stmt.Rls();}
|
||||
}
|
||||
private static Db_stmt Delete_stmt(Db_provider p) {return Db_stmt_.new_delete_(p, Tbl_name, Fld_bin_owner_id);}
|
||||
private static Db_stmt Delete_stmt(Db_conn p) {return Db_stmt_.new_delete_(p, Tbl_name, Fld_bin_owner_id);}
|
||||
private static void Delete(Db_stmt stmt, int id) {
|
||||
stmt.Clear()
|
||||
.Val_int_(id)
|
||||
.Val_int(id)
|
||||
.Exec_delete();
|
||||
}
|
||||
public static Io_stream_rdr Select_as_rdr(Db_provider p, int owner) {
|
||||
public static Io_stream_rdr Select_as_rdr(Db_conn p, int owner) {
|
||||
Db_qry qry = Db_qry_.select_().From_(Tbl_name).Cols_(Fld_bin_data).Where_(Db_crt_.eq_(Fld_bin_owner_id, owner));
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
try {
|
||||
@@ -70,7 +70,7 @@ public class Fsdb_bin_tbl {
|
||||
}
|
||||
finally {rdr.Rls();}
|
||||
}
|
||||
public static boolean Select_to_url(Db_provider p, int owner, Io_url url, byte[] bin_bfr, int bin_flush_when) {
|
||||
public static boolean Select_to_url(Db_conn p, int owner, Io_url url, byte[] bin_bfr, int bin_flush_when) {
|
||||
Db_qry qry = Db_qry_.select_().From_(Tbl_name).Cols_(Fld_bin_data).Where_(Db_crt_.eq_(Fld_bin_owner_id, owner));
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
try {
|
||||
|
||||
@@ -57,9 +57,9 @@ public class Fsdb_cfg_mgr {
|
||||
}
|
||||
return grp;
|
||||
}
|
||||
public static Fsdb_cfg_mgr load_(Fsdb_db_abc_mgr abc_mgr, Db_provider p) {return new Fsdb_cfg_mgr().Init_by_load(p);}
|
||||
public static Fsdb_cfg_mgr make_(Fsdb_db_abc_mgr abc_mgr, Db_provider p) {return new Fsdb_cfg_mgr().Init_by_make(p);}
|
||||
private Fsdb_cfg_mgr Init_by_load(Db_provider p) {
|
||||
public static Fsdb_cfg_mgr load_(Fsdb_db_abc_mgr abc_mgr, Db_conn p) {return new Fsdb_cfg_mgr().Init_by_load(p);}
|
||||
public static Fsdb_cfg_mgr make_(Fsdb_db_abc_mgr abc_mgr, Db_conn p) {return new Fsdb_cfg_mgr().Init_by_make(p);}
|
||||
private Fsdb_cfg_mgr Init_by_load(Db_conn p) {
|
||||
this.cfg_tbl = new Fsdb_cfg_tbl_sql().Ctor(p, false);
|
||||
Fsdb_cfg_grp core_grp = Grps_get_or_load(Grp_core);
|
||||
this.next_id = core_grp.Get_int_or(Key_next_id, -1); if (next_id == -1) throw Err_.new_("next_id not found in fsdb_cfg");
|
||||
@@ -67,7 +67,7 @@ public class Fsdb_cfg_mgr {
|
||||
this.patch_next_id = core_grp.Get_yn_or_n(Key_patch_next_id);
|
||||
return this;
|
||||
}
|
||||
private Fsdb_cfg_mgr Init_by_make(Db_provider p) {
|
||||
private Fsdb_cfg_mgr Init_by_make(Db_conn p) {
|
||||
this.cfg_tbl = new Fsdb_cfg_tbl_sql().Ctor(p, true);
|
||||
this.cfg_tbl.Insert(Grp_core, Key_next_id , "1"); // start next_id at 1
|
||||
this.cfg_tbl.Insert(Grp_core, Key_schema_thm_page , "y"); // new dbs automatically have page and time in fsdb_xtn_tm
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.fsdb; import gplx.*;
|
||||
import gplx.dbs.*;
|
||||
public interface Fsdb_cfg_tbl extends RlsAble {
|
||||
Fsdb_cfg_tbl Ctor(Db_provider provider, boolean created);
|
||||
Fsdb_cfg_tbl Ctor(Db_conn conn, boolean created);
|
||||
void Insert(String grp, String key, String val);
|
||||
void Update(String grp, String key, String val);
|
||||
int Select_as_int_or(String grp, String key, int or);
|
||||
@@ -36,7 +36,7 @@ abstract class Fsdb_cfg_tbl_base {
|
||||
}
|
||||
class Fsdb_cfg_tbl_mem extends Fsdb_cfg_tbl_base implements Fsdb_cfg_tbl {
|
||||
private HashAdp grps = HashAdp_.new_();
|
||||
public Fsdb_cfg_tbl Ctor(Db_provider provider, boolean created) {return this;}
|
||||
public Fsdb_cfg_tbl Ctor(Db_conn conn, boolean created) {return this;}
|
||||
public void Insert(String grp, String key, String val) {
|
||||
Fsdb_cfg_grp grp_itm = Grps_get_or_make(grp);
|
||||
grp_itm.Insert(key, val);
|
||||
@@ -66,45 +66,45 @@ class Fsdb_cfg_tbl_mem extends Fsdb_cfg_tbl_base implements Fsdb_cfg_tbl {
|
||||
public Fsdb_cfg_grp Grps_get_or_null(String grp) {return (Fsdb_cfg_grp)grps.Fetch(grp);}
|
||||
}
|
||||
class Fsdb_cfg_tbl_sql extends Fsdb_cfg_tbl_base implements Fsdb_cfg_tbl {
|
||||
private Db_provider provider;
|
||||
private Db_conn conn;
|
||||
private Db_stmt stmt_insert, stmt_update, stmt_select;
|
||||
public Fsdb_cfg_tbl Ctor(Db_provider provider, boolean created) {
|
||||
this.provider = provider;
|
||||
public Fsdb_cfg_tbl Ctor(Db_conn conn, boolean created) {
|
||||
this.conn = conn;
|
||||
if (created) Create_table();
|
||||
return this;
|
||||
}
|
||||
private void Create_table() {
|
||||
Sqlite_engine_.Tbl_create(provider, Tbl_name, Tbl_sql);
|
||||
Sqlite_engine_.Idx_create(provider, Idx_main);
|
||||
Sqlite_engine_.Tbl_create(conn, Tbl_name, Tbl_sql);
|
||||
Sqlite_engine_.Idx_create(conn, Idx_main);
|
||||
}
|
||||
private Db_stmt Insert_stmt() {return Db_stmt_.new_insert_(provider, Tbl_name, Fld_cfg_grp, Fld_cfg_key, Fld_cfg_val);}
|
||||
private Db_stmt Insert_stmt() {return Db_stmt_.new_insert_(conn, Tbl_name, Fld_cfg_grp, Fld_cfg_key, Fld_cfg_val);}
|
||||
public void Insert(String grp, String key, String val) {
|
||||
if (stmt_insert == null) stmt_insert = Insert_stmt();
|
||||
stmt_insert.Clear()
|
||||
.Val_str_(grp)
|
||||
.Val_str_(key)
|
||||
.Val_str_(val)
|
||||
.Val_str(grp)
|
||||
.Val_str(key)
|
||||
.Val_str(val)
|
||||
.Exec_insert();
|
||||
}
|
||||
private Db_stmt Update_stmt() {return Db_stmt_.new_update_(provider, Tbl_name, String_.Ary(Fld_cfg_grp, Fld_cfg_key), Fld_cfg_val);}
|
||||
private Db_stmt Update_stmt() {return Db_stmt_.new_update_(conn, Tbl_name, String_.Ary(Fld_cfg_grp, Fld_cfg_key), Fld_cfg_val);}
|
||||
public void Update(String grp, String key, String val) {
|
||||
if (stmt_update == null) stmt_update = Update_stmt();
|
||||
stmt_update.Clear()
|
||||
.Val_str_(val)
|
||||
.Val_str_(grp)
|
||||
.Val_str_(key)
|
||||
.Val_str(val)
|
||||
.Val_str(grp)
|
||||
.Val_str(key)
|
||||
.Exec_update();
|
||||
}
|
||||
private Db_stmt Select_stmt() {
|
||||
Db_qry_select qry = Db_qry_.select_val_(Tbl_name, Fld_cfg_val, gplx.criterias.Criteria_.And_many(Db_crt_.eq_(Fld_cfg_grp, ""), Db_crt_.eq_(Fld_cfg_key, "")));
|
||||
return provider.Prepare(qry);
|
||||
return conn.New_stmt(qry);
|
||||
}
|
||||
@Override public int Select_as_int_or(String grp, String key, int or) {return Int_.parse_or_(Select_as_str_or(grp, key, null), or);}
|
||||
public String Select_as_str_or(String grp, String key, String or) {
|
||||
if (stmt_select == null) stmt_select = Select_stmt();
|
||||
Object rv = (String)stmt_select.Clear()
|
||||
.Val_str_(grp)
|
||||
.Val_str_(key)
|
||||
.Val_str(grp)
|
||||
.Val_str(key)
|
||||
.Exec_select_val();
|
||||
return rv == null ? or : (String)rv;
|
||||
}
|
||||
@@ -113,7 +113,7 @@ class Fsdb_cfg_tbl_sql extends Fsdb_cfg_tbl_base implements Fsdb_cfg_tbl {
|
||||
Db_qry_select qry = Db_qry_.select_cols_(Tbl_name, gplx.criterias.Criteria_.And_many(Db_crt_.eq_(Fld_cfg_grp, "")), Fld_cfg_key, Fld_cfg_val);
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
try {
|
||||
rdr = provider.Prepare(qry).Clear().Val_str_(grp).Exec_select();
|
||||
rdr = conn.New_stmt(qry).Clear().Val_str(grp).Exec_select();
|
||||
while (rdr.MoveNextPeer()) {
|
||||
if (rv == null) rv = new Fsdb_cfg_grp(grp);
|
||||
String key = rdr.ReadStr(Fld_cfg_key);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.fsdb; import gplx.*;
|
||||
import gplx.dbs.*;
|
||||
public class Fsdb_db_abc_mgr implements RlsAble {
|
||||
private Db_provider boot_provider;
|
||||
private Db_conn boot_provider;
|
||||
public int Next_id() {return cfg_mgr.Next_id();}
|
||||
public Fsdb_mnt_mgr Mnt_mgr() {return mnt_mgr;} private Fsdb_mnt_mgr mnt_mgr;
|
||||
public Fsdb_db_abc_mgr(Fsdb_mnt_mgr mnt_mgr) {this.mnt_mgr = mnt_mgr;}
|
||||
@@ -78,16 +78,16 @@ public class Fsdb_db_abc_mgr implements RlsAble {
|
||||
boot_provider.Conn_term();
|
||||
}
|
||||
private void Init_load(Io_url dir, Io_url boot_url) {
|
||||
Db_conn_info connect = Db_conn_info__sqlite.load_(boot_url);
|
||||
boot_provider = Db_provider_.new_and_open_(connect);
|
||||
Db_url connect = Db_url__sqlite.load_(boot_url);
|
||||
boot_provider = Db_conn_.new_and_open_(connect);
|
||||
atr_mgr = Fsdb_db_atr_mgr.load_(this, boot_provider, dir);
|
||||
bin_mgr = Fsdb_db_bin_mgr.load_(boot_provider, dir);
|
||||
cfg_mgr = Fsdb_cfg_mgr.load_(this, boot_provider);
|
||||
if (!cfg_mgr.Patch_next_id()) Fsdb_db_abc_mgr_.Patch_next_id(this, dir);
|
||||
}
|
||||
private void Init_make(Io_url dir, Io_url boot_url) {
|
||||
Db_conn_info connect = Db_conn_info__sqlite.make_(boot_url);
|
||||
boot_provider = Db_provider_.new_and_open_(connect);
|
||||
Db_url connect = Db_url__sqlite.make_(boot_url);
|
||||
boot_provider = Db_conn_.new_and_open_(connect);
|
||||
Sqlite_engine_.Pragma_page_size_4096(boot_provider);
|
||||
atr_mgr = Fsdb_db_atr_mgr.make_(this, boot_provider, dir);
|
||||
bin_mgr = Fsdb_db_bin_mgr.make_(boot_provider, dir);
|
||||
@@ -103,8 +103,8 @@ class Fsdb_db_abc_mgr_ {
|
||||
int last_id = -1;
|
||||
if (atr_mgr.Len() > 0) {
|
||||
Fsdb_db_atr_fil atr_fil = atr_mgr.Get_at(0);
|
||||
int max_fil_id = Db_provider_.Select_fld0_as_int_or(atr_fil.Provider(), "SELECT Max(fil_id) AS MaxId FROM fsdb_fil;", -1);
|
||||
int max_thm_id = Db_provider_.Select_fld0_as_int_or(atr_fil.Provider(), "SELECT Max(thm_id) AS MaxId FROM fsdb_xtn_thm;", -1);
|
||||
int max_fil_id = Db_conn_.Select_fld0_as_int_or(atr_fil.Conn(), "SELECT Max(fil_id) AS MaxId FROM fsdb_fil;", -1);
|
||||
int max_thm_id = Db_conn_.Select_fld0_as_int_or(atr_fil.Conn(), "SELECT Max(thm_id) AS MaxId FROM fsdb_xtn_thm;", -1);
|
||||
last_id = max_fil_id > max_thm_id ? max_fil_id : max_thm_id;
|
||||
}
|
||||
cfg_mgr.Patch_next_id_exec(last_id);
|
||||
|
||||
@@ -22,15 +22,15 @@ public class Fsdb_db_atr_fil implements RlsAble {
|
||||
private Fsdb_dir_tbl tbl_dir; private Fsdb_fil_tbl tbl_fil; private Fsdb_xtn_thm_tbl tbl_thm;
|
||||
public Fsdb_db_atr_fil(Fsdb_db_abc_mgr abc_mgr, Io_url url, boolean create) {
|
||||
this.abc_mgr = abc_mgr;
|
||||
Db_conn_info connect = create ? Db_conn_info__sqlite.make_(url) : Db_conn_info__sqlite.load_(url);
|
||||
provider = Db_provider_.new_and_open_(connect);
|
||||
Sqlite_engine_.Pragma_page_size_4096(provider);
|
||||
tbl_dir = new Fsdb_dir_tbl(provider, create);
|
||||
tbl_fil = new Fsdb_fil_tbl(provider, create);
|
||||
tbl_thm = new Fsdb_xtn_thm_tbl(this, provider, create);
|
||||
Db_url connect = create ? Db_url__sqlite.make_(url) : Db_url__sqlite.load_(url);
|
||||
conn = Db_conn_.new_and_open_(connect);
|
||||
Sqlite_engine_.Pragma_page_size_4096(conn);
|
||||
tbl_dir = new Fsdb_dir_tbl(conn, create);
|
||||
tbl_fil = new Fsdb_fil_tbl(conn, create);
|
||||
tbl_thm = new Fsdb_xtn_thm_tbl(this, conn, create);
|
||||
}
|
||||
public Fsdb_db_abc_mgr Abc_mgr() {return abc_mgr;} private Fsdb_db_abc_mgr abc_mgr;
|
||||
public Db_provider Provider() {return provider;} private Db_provider provider;
|
||||
public Db_conn Conn() {return conn;} private Db_conn conn;
|
||||
public int Id() {return id;} private int id;
|
||||
public Io_url Url() {return url;} private Io_url url;
|
||||
public String Path_bgn() {return path_bgn;} private String path_bgn;
|
||||
@@ -39,14 +39,14 @@ public class Fsdb_db_atr_fil implements RlsAble {
|
||||
tbl_dir.Rls();
|
||||
tbl_fil.Rls();
|
||||
tbl_thm.Rls();
|
||||
provider.Txn_mgr().Txn_end_all();
|
||||
provider.Conn_term();
|
||||
conn.Txn_mgr().Txn_end_all();
|
||||
conn.Conn_term();
|
||||
}
|
||||
public void Txn_open() {
|
||||
provider.Txn_mgr().Txn_bgn_if_none();
|
||||
conn.Txn_mgr().Txn_bgn_if_none();
|
||||
}
|
||||
public void Txn_save() {
|
||||
provider.Txn_mgr().Txn_end_all();
|
||||
conn.Txn_mgr().Txn_end_all();
|
||||
}
|
||||
public Fsdb_fil_itm Fil_select(byte[] dir, byte[] fil) {
|
||||
Int_obj_ref dir_id_obj = (Int_obj_ref)dir_cache.Get_or_null(dir);
|
||||
|
||||
@@ -39,8 +39,8 @@ public class Fsdb_db_atr_mgr implements RlsAble {
|
||||
itm.Txn_open();
|
||||
}
|
||||
}
|
||||
public void Txn_save(Db_provider provider) {
|
||||
Fsdb_db_atr_tbl.Commit_all(provider, itms);
|
||||
public void Txn_save(Db_conn conn) {
|
||||
Fsdb_db_atr_tbl.Commit_all(conn, itms);
|
||||
int len = itms.length;
|
||||
for (int i = 0; i < len; i++) {
|
||||
Fsdb_db_atr_fil itm = itms[i];
|
||||
@@ -54,13 +54,13 @@ public class Fsdb_db_atr_mgr implements RlsAble {
|
||||
itm.Rls();
|
||||
}
|
||||
}
|
||||
public static Fsdb_db_atr_mgr load_(Fsdb_db_abc_mgr abc_mgr, Db_provider p, Io_url dir) {
|
||||
public static Fsdb_db_atr_mgr load_(Fsdb_db_abc_mgr abc_mgr, Db_conn p, Io_url dir) {
|
||||
Fsdb_db_atr_mgr rv = new Fsdb_db_atr_mgr();
|
||||
rv.itms = Fsdb_db_atr_tbl.Select_all(abc_mgr, p, dir);
|
||||
rv.itms_0 = rv.itms[0];
|
||||
return rv;
|
||||
}
|
||||
public static Fsdb_db_atr_mgr make_(Fsdb_db_abc_mgr abc_mgr, Db_provider p, Io_url dir) {
|
||||
public static Fsdb_db_atr_mgr make_(Fsdb_db_abc_mgr abc_mgr, Db_conn p, Io_url dir) {
|
||||
Fsdb_db_atr_tbl.Create_table(p);
|
||||
Fsdb_db_atr_mgr rv = new Fsdb_db_atr_mgr();
|
||||
Fsdb_db_atr_fil itm = Fsdb_db_atr_fil.make_(abc_mgr, Id_0, url_(dir, Id_0), Path_bgn_0);
|
||||
|
||||
@@ -18,8 +18,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.fsdb; import gplx.*;
|
||||
import gplx.dbs.*;
|
||||
public class Fsdb_db_atr_tbl {
|
||||
public static void Create_table(Db_provider p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);}
|
||||
public static Fsdb_db_atr_fil[] Select_all(Fsdb_db_abc_mgr abc_mgr, Db_provider p, Io_url dir) {
|
||||
public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);}
|
||||
public static Fsdb_db_atr_fil[] Select_all(Fsdb_db_abc_mgr abc_mgr, Db_conn p, Io_url dir) {
|
||||
ListAdp rv = ListAdp_.new_();
|
||||
Db_qry qry = Db_qry_select.new_().From_(Tbl_name).Cols_all_().OrderBy_asc_(Fld_uid);
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
@@ -32,8 +32,8 @@ public class Fsdb_db_atr_tbl {
|
||||
} finally {rdr.Rls();}
|
||||
return (Fsdb_db_atr_fil[])rv.Xto_ary(Fsdb_db_atr_fil.class);
|
||||
}
|
||||
public static void Commit_all(Db_provider provider, Fsdb_db_atr_fil[] ary) {
|
||||
stmt_bldr.Init(provider);
|
||||
public static void Commit_all(Db_conn conn, Fsdb_db_atr_fil[] ary) {
|
||||
stmt_bldr.Init(conn);
|
||||
try {
|
||||
int len = ary.length;
|
||||
for (int i = 0; i < len; i++)
|
||||
@@ -44,9 +44,9 @@ public class Fsdb_db_atr_tbl {
|
||||
private static void Commit_itm(Fsdb_db_atr_fil itm) {
|
||||
Db_stmt stmt = stmt_bldr.Get(itm.Cmd_mode());
|
||||
switch (itm.Cmd_mode()) {
|
||||
case Db_cmd_mode.Create: stmt.Clear().Val_int_(itm.Id()) .Val_str_(itm.Url().NameAndExt()).Val_str_(itm.Path_bgn()).Exec_insert(); break;
|
||||
case Db_cmd_mode.Update: stmt.Clear() .Val_str_(itm.Url().NameAndExt()).Val_str_(itm.Path_bgn()).Val_int_(itm.Id()).Exec_update(); break;
|
||||
case Db_cmd_mode.Delete: stmt.Clear().Val_int_(itm.Id()).Exec_delete(); break;
|
||||
case Db_cmd_mode.Create: stmt.Clear().Val_int(itm.Id()) .Val_str(itm.Url().NameAndExt()).Val_str(itm.Path_bgn()).Exec_insert(); break;
|
||||
case Db_cmd_mode.Update: stmt.Clear() .Val_str(itm.Url().NameAndExt()).Val_str(itm.Path_bgn()).Val_int(itm.Id()).Exec_update(); break;
|
||||
case Db_cmd_mode.Delete: stmt.Clear().Val_int(itm.Id()).Exec_delete(); break;
|
||||
case Db_cmd_mode.Ignore: break;
|
||||
default: throw Err_.unhandled(itm.Cmd_mode());
|
||||
}
|
||||
|
||||
@@ -31,32 +31,32 @@ public class Fsdb_db_bin_fil implements RlsAble {
|
||||
if (cmd_mode == Db_cmd_mode.Ignore) cmd_mode = Db_cmd_mode.Update;
|
||||
}
|
||||
public byte Cmd_mode() {return cmd_mode;} public Fsdb_db_bin_fil Cmd_mode_(byte v) {cmd_mode = v; return this;} private byte cmd_mode;
|
||||
public Db_provider Provider() {
|
||||
if (provider == null) {
|
||||
public Db_conn Conn() {
|
||||
if (conn == null) {
|
||||
if (cmd_mode == Db_cmd_mode.Create) {
|
||||
provider = Db_provider_.new_and_open_(Db_conn_info__sqlite.make_(url));
|
||||
Sqlite_engine_.Pragma_page_size_4096(provider);
|
||||
Fsdb_bin_tbl.Create_table(provider);
|
||||
conn = Db_conn_.new_and_open_(Db_url__sqlite.make_(url));
|
||||
Sqlite_engine_.Pragma_page_size_4096(conn);
|
||||
Fsdb_bin_tbl.Create_table(conn);
|
||||
}
|
||||
else
|
||||
provider = Db_provider_.new_and_open_(Db_conn_info__sqlite.load_(url));
|
||||
conn = Db_conn_.new_and_open_(Db_url__sqlite.load_(url));
|
||||
}
|
||||
return provider;
|
||||
} private Db_provider provider;
|
||||
public void Rls() {if (provider != null) provider.Conn_term();}
|
||||
return conn;
|
||||
} private Db_conn conn;
|
||||
public void Rls() {if (conn != null) conn.Conn_term();}
|
||||
public long Insert(int bin_id, byte owner_tid, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {
|
||||
Db_stmt stmt = Db_stmt_.Null;
|
||||
try {
|
||||
stmt = Fsdb_bin_tbl.Insert_stmt(this.Provider());
|
||||
stmt = Fsdb_bin_tbl.Insert_stmt(this.Conn());
|
||||
return Fsdb_bin_tbl.Insert_rdr(stmt, bin_id, owner_tid, bin_len, bin_rdr);
|
||||
}
|
||||
finally {stmt.Rls();}
|
||||
}
|
||||
public boolean Get_to_url(int id, Io_url url, byte[] bin_bfr, int bin_flush_when) {
|
||||
return Fsdb_bin_tbl.Select_to_url(this.Provider(), id, url, bin_bfr, bin_flush_when);
|
||||
return Fsdb_bin_tbl.Select_to_url(this.Conn(), id, url, bin_bfr, bin_flush_when);
|
||||
}
|
||||
public Io_stream_rdr Get_as_rdr(int id) {
|
||||
return Fsdb_bin_tbl.Select_as_rdr(this.Provider(), id);
|
||||
return Fsdb_bin_tbl.Select_as_rdr(this.Conn(), id);
|
||||
}
|
||||
public static Fsdb_db_bin_fil load_(DataRdr rdr, Io_url dir) {
|
||||
return new_
|
||||
@@ -69,7 +69,7 @@ public class Fsdb_db_bin_fil implements RlsAble {
|
||||
}
|
||||
public static Fsdb_db_bin_fil make_(int id, Io_url url, long bin_len, long bin_max) {
|
||||
Fsdb_db_bin_fil rv = new_(id, url, bin_len, bin_max, Db_cmd_mode.Create);
|
||||
rv.Provider(); // force table create
|
||||
rv.Conn(); // force table create
|
||||
return rv;
|
||||
}
|
||||
private static Fsdb_db_bin_fil new_(int id, Io_url url, long bin_len, long bin_max, byte cmd_mode) {
|
||||
|
||||
@@ -21,7 +21,7 @@ public class Fsdb_db_bin_mgr implements RlsAble {
|
||||
private Io_url dir;
|
||||
private Fsdb_db_bin_fil[] itms = Fsdb_db_bin_fil.Ary_empty; private int itms_len = 0;
|
||||
private Fsdb_db_bin_fil itms_n;
|
||||
private Db_provider provider;
|
||||
private Db_conn conn;
|
||||
private Fsdb_db_bin_mgr(Io_url dir) {this.dir = dir;}
|
||||
public int Len() {return itms.length;}
|
||||
public long Db_bin_max() {return db_bin_max;}
|
||||
@@ -35,11 +35,11 @@ public class Fsdb_db_bin_mgr implements RlsAble {
|
||||
public Fsdb_db_bin_fil Get_at(int i) {return itms[i];}
|
||||
private Fsdb_db_bin_fil Get_cur() {return itms_len == 0 ? null : itms[itms_len - 1];}
|
||||
public void Txn_open() {
|
||||
Get_cur().Provider().Txn_mgr().Txn_bgn_if_none();
|
||||
Get_cur().Conn().Txn_mgr().Txn_bgn_if_none();
|
||||
}
|
||||
public void Txn_save() {
|
||||
Fsdb_db_bin_tbl.Commit_all(provider, itms);
|
||||
Get_cur().Provider().Txn_mgr().Txn_end_all();
|
||||
Fsdb_db_bin_tbl.Commit_all(conn, itms);
|
||||
Get_cur().Conn().Txn_mgr().Txn_end_all();
|
||||
}
|
||||
public void Rls() {
|
||||
int len = itms.length;
|
||||
@@ -62,26 +62,26 @@ public class Fsdb_db_bin_mgr implements RlsAble {
|
||||
Fsdb_db_bin_fil bin_fil = itms[db_id];
|
||||
return bin_fil.Insert(bin_id, owner_tid, bin_len, bin_rdr);
|
||||
}
|
||||
public static Fsdb_db_bin_mgr load_(Db_provider p, Io_url dir) {
|
||||
public static Fsdb_db_bin_mgr load_(Db_conn p, Io_url dir) {
|
||||
Fsdb_db_bin_mgr rv = new Fsdb_db_bin_mgr(dir);
|
||||
rv.provider = p;
|
||||
rv.conn = p;
|
||||
rv.itms = Fsdb_db_bin_tbl.Select_all(p, dir);
|
||||
rv.itms_len = rv.itms.length;
|
||||
rv.itms_n = rv.itms[rv.itms_len - 1];
|
||||
return rv;
|
||||
}
|
||||
public static Fsdb_db_bin_mgr make_(Db_provider p, Io_url dir) {
|
||||
public static Fsdb_db_bin_mgr make_(Db_conn p, Io_url dir) {
|
||||
Fsdb_db_bin_tbl.Create_table(p);
|
||||
Fsdb_db_bin_mgr rv = new Fsdb_db_bin_mgr(dir);
|
||||
rv.provider = p;
|
||||
rv.conn = p;
|
||||
rv.Itms_add(0);
|
||||
return rv;
|
||||
}
|
||||
private void Itms_add(long bin_len) {
|
||||
Fsdb_db_bin_fil cur = Get_cur();
|
||||
if (cur != null) {
|
||||
cur.Provider().Txn_mgr().Txn_end_all();
|
||||
cur.Provider().Conn_term();
|
||||
cur.Conn().Txn_mgr().Txn_end_all();
|
||||
cur.Conn().Conn_term();
|
||||
}
|
||||
int new_itms_len = itms_len + 1;
|
||||
Fsdb_db_bin_fil[] new_itms = new Fsdb_db_bin_fil[new_itms_len];
|
||||
|
||||
@@ -18,9 +18,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.fsdb; import gplx.*;
|
||||
import gplx.dbs.*;
|
||||
public class Fsdb_db_bin_tbl {
|
||||
public static void Create_table(Db_provider p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);}
|
||||
public static void Commit_all(Db_provider provider, Fsdb_db_bin_fil[] ary) {
|
||||
stmt_bldr.Init(provider);
|
||||
public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);}
|
||||
public static void Commit_all(Db_conn conn, Fsdb_db_bin_fil[] ary) {
|
||||
stmt_bldr.Init(conn);
|
||||
try {
|
||||
int len = ary.length;
|
||||
for (int i = 0; i < len; i++)
|
||||
@@ -31,15 +31,15 @@ public class Fsdb_db_bin_tbl {
|
||||
private static void Commit_itm(Fsdb_db_bin_fil itm) {
|
||||
Db_stmt stmt = stmt_bldr.Get(itm.Cmd_mode());
|
||||
switch (itm.Cmd_mode()) {
|
||||
case Db_cmd_mode.Create: stmt.Clear().Val_int_(itm.Id()) .Val_str_(itm.Url().NameAndExt()).Val_long_(itm.Bin_len()).Val_long_(itm.Bin_max()).Exec_insert(); break;
|
||||
case Db_cmd_mode.Update: stmt.Clear() .Val_str_(itm.Url().NameAndExt()).Val_long_(itm.Bin_len()).Val_long_(itm.Bin_max()).Val_int_(itm.Id()).Exec_update(); break;
|
||||
case Db_cmd_mode.Delete: stmt.Clear().Val_int_(itm.Id()).Exec_delete(); break;
|
||||
case Db_cmd_mode.Create: stmt.Clear().Val_int(itm.Id()) .Val_str(itm.Url().NameAndExt()).Val_long(itm.Bin_len()).Val_long(itm.Bin_max()).Exec_insert(); break;
|
||||
case Db_cmd_mode.Update: stmt.Clear() .Val_str(itm.Url().NameAndExt()).Val_long(itm.Bin_len()).Val_long(itm.Bin_max()).Val_int(itm.Id()).Exec_update(); break;
|
||||
case Db_cmd_mode.Delete: stmt.Clear().Val_int(itm.Id()).Exec_delete(); break;
|
||||
case Db_cmd_mode.Ignore: break;
|
||||
default: throw Err_.unhandled(itm.Cmd_mode());
|
||||
}
|
||||
itm.Cmd_mode_(Db_cmd_mode.Ignore);
|
||||
}
|
||||
public static Fsdb_db_bin_fil[] Select_all(Db_provider p, Io_url dir) {
|
||||
public static Fsdb_db_bin_fil[] Select_all(Db_conn p, Io_url dir) {
|
||||
ListAdp rv = ListAdp_.new_();
|
||||
Db_qry qry = Db_qry_select.new_().From_(Tbl_name).Cols_all_().OrderBy_asc_(Fld_uid);
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
|
||||
@@ -18,10 +18,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.fsdb; import gplx.*;
|
||||
import gplx.dbs.*;
|
||||
public class Fsdb_dir_tbl {
|
||||
private Db_provider provider;
|
||||
private Db_conn conn;
|
||||
private Db_stmt stmt_insert, stmt_update, stmt_select_by_name;
|
||||
public Fsdb_dir_tbl(Db_provider provider, boolean created) {
|
||||
this.provider = provider;
|
||||
public Fsdb_dir_tbl(Db_conn conn, boolean created) {
|
||||
this.conn = conn;
|
||||
if (created) Create_table();
|
||||
}
|
||||
public void Rls() {
|
||||
@@ -30,41 +30,41 @@ public class Fsdb_dir_tbl {
|
||||
if (stmt_select_by_name != null) {stmt_select_by_name.Rls(); stmt_select_by_name = null;}
|
||||
}
|
||||
public void Create_table() {
|
||||
Sqlite_engine_.Tbl_create(provider, Tbl_name, Tbl_sql);
|
||||
Sqlite_engine_.Idx_create(provider, Idx_name);
|
||||
Sqlite_engine_.Tbl_create(conn, Tbl_name, Tbl_sql);
|
||||
Sqlite_engine_.Idx_create(conn, Idx_name);
|
||||
}
|
||||
private Db_stmt Insert_stmt() {return Db_stmt_.new_insert_(provider, Tbl_name, Fld_dir_id, Fld_dir_owner_id, Fld_dir_name);}
|
||||
private Db_stmt Insert_stmt() {return Db_stmt_.new_insert_(conn, Tbl_name, Fld_dir_id, Fld_dir_owner_id, Fld_dir_name);}
|
||||
public void Insert(int id, String name, int owner_id) {
|
||||
if (stmt_insert == null) stmt_insert = Insert_stmt();
|
||||
try {
|
||||
stmt_insert.Clear()
|
||||
.Val_int_(id)
|
||||
.Val_int_(owner_id)
|
||||
.Val_str_(name)
|
||||
.Val_int(id)
|
||||
.Val_int(owner_id)
|
||||
.Val_str(name)
|
||||
.Exec_insert();
|
||||
} catch (Exception exc) {stmt_insert = null; throw Err_.err_(exc, "stmt failed");} // must reset stmt, else next call will fail
|
||||
}
|
||||
private Db_stmt Update_stmt() {return Db_stmt_.new_update_(provider, Tbl_name, String_.Ary(Fld_dir_id), Fld_dir_owner_id, Fld_dir_name);}
|
||||
private Db_stmt Update_stmt() {return Db_stmt_.new_update_(conn, Tbl_name, String_.Ary(Fld_dir_id), Fld_dir_owner_id, Fld_dir_name);}
|
||||
public void Update(int id, String name, int owner_id) {
|
||||
if (stmt_update == null) stmt_update = Update_stmt();
|
||||
try {
|
||||
stmt_update.Clear()
|
||||
.Val_int_(id)
|
||||
.Val_str_(name)
|
||||
.Val_int_(owner_id)
|
||||
.Val_int(id)
|
||||
.Val_str(name)
|
||||
.Val_int(owner_id)
|
||||
.Exec_update();
|
||||
} catch (Exception exc) {stmt_update = null; throw Err_.err_(exc, "stmt failed");} // must reset stmt, else next call will fail
|
||||
}
|
||||
private Db_stmt Select_itm_stmt() {
|
||||
Db_qry qry = Db_qry_.select_().From_(Tbl_name).Cols_(Fld_dir_id, Fld_dir_owner_id).Where_(Db_crt_.eq_(Fld_dir_name, Bry_.Empty));
|
||||
return provider.Prepare(qry);
|
||||
return conn.New_stmt(qry);
|
||||
}
|
||||
public Fsdb_dir_itm Select_itm(String dir_name) {
|
||||
if (stmt_select_by_name == null) stmt_select_by_name = Select_itm_stmt();
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
try {
|
||||
rdr = stmt_select_by_name.Clear()
|
||||
.Val_str_(dir_name)
|
||||
.Val_str(dir_name)
|
||||
.Exec_select();
|
||||
while (rdr.MoveNextPeer()) {
|
||||
return new Fsdb_dir_itm(rdr.ReadInt(Fld_dir_id), rdr.ReadInt(Fld_dir_owner_id), dir_name);
|
||||
|
||||
@@ -18,15 +18,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.fsdb; import gplx.*;
|
||||
import gplx.dbs.*;
|
||||
public class Fsdb_fil_tbl {
|
||||
private Db_provider provider;
|
||||
private Db_conn conn;
|
||||
private Db_stmt stmt_insert, stmt_update, stmt_select_by_name, stmt_select_by_id;
|
||||
public Fsdb_fil_tbl(Db_provider provider, boolean created) {
|
||||
this.provider = provider;
|
||||
public Fsdb_fil_tbl(Db_conn conn, boolean created) {
|
||||
this.conn = conn;
|
||||
if (created) Create_table();
|
||||
}
|
||||
private void Create_table() {
|
||||
Sqlite_engine_.Tbl_create(provider, Tbl_name, Tbl_sql);
|
||||
Sqlite_engine_.Idx_create(provider, Idx_owner);
|
||||
Sqlite_engine_.Tbl_create(conn, Tbl_name, Tbl_sql);
|
||||
Sqlite_engine_.Idx_create(conn, Idx_owner);
|
||||
}
|
||||
public void Rls() {
|
||||
if (stmt_insert != null) {stmt_insert.Rls(); stmt_insert = null;}
|
||||
@@ -34,37 +34,37 @@ public class Fsdb_fil_tbl {
|
||||
if (stmt_select_by_name != null) {stmt_select_by_name.Rls(); stmt_select_by_name = null;}
|
||||
if (stmt_select_by_id != null) {stmt_select_by_id.Rls(); stmt_select_by_id = null;}
|
||||
}
|
||||
private Db_stmt Insert_stmt() {return Db_stmt_.new_insert_(provider, Tbl_name, Fld_fil_id, Fld_fil_owner_id, Fld_fil_name, Fld_fil_xtn_id, Fld_fil_ext_id, Fld_fil_bin_db_id, Fld_fil_size, Fld_fil_modified, Fld_fil_hash);}
|
||||
private Db_stmt Insert_stmt() {return Db_stmt_.new_insert_(conn, Tbl_name, Fld_fil_id, Fld_fil_owner_id, Fld_fil_name, Fld_fil_xtn_id, Fld_fil_ext_id, Fld_fil_bin_db_id, Fld_fil_size, Fld_fil_modified, Fld_fil_hash);}
|
||||
public void Insert(int id, int owner_id, String name, int xtn_id, int ext_id, long size, DateAdp modified, String hash, int bin_db_id) {
|
||||
if (stmt_insert == null) stmt_insert = Insert_stmt();
|
||||
try {
|
||||
stmt_insert.Clear()
|
||||
.Val_int_(id)
|
||||
.Val_int_(owner_id)
|
||||
.Val_str_(name)
|
||||
.Val_int_(xtn_id)
|
||||
.Val_int_(ext_id)
|
||||
.Val_int_(bin_db_id)
|
||||
.Val_long_(size)
|
||||
.Val_str_(Sqlite_engine_.X_date_to_str(modified))
|
||||
.Val_str_(hash)
|
||||
.Val_int(id)
|
||||
.Val_int(owner_id)
|
||||
.Val_str(name)
|
||||
.Val_int(xtn_id)
|
||||
.Val_int(ext_id)
|
||||
.Val_int(bin_db_id)
|
||||
.Val_long(size)
|
||||
.Val_str(Sqlite_engine_.X_date_to_str(modified))
|
||||
.Val_str(hash)
|
||||
.Exec_insert();
|
||||
} catch (Exception exc) {stmt_insert = null; throw Err_.err_(exc, "stmt failed");} // must reset stmt, else next call will fail
|
||||
}
|
||||
private Db_stmt Update_stmt() {return Db_stmt_.new_update_(provider, Tbl_name, String_.Ary(Fld_fil_id), Fld_fil_owner_id, Fld_fil_name, Fld_fil_xtn_id, Fld_fil_ext_id, Fld_fil_bin_db_id, Fld_fil_size, Fld_fil_modified, Fld_fil_hash);}
|
||||
private Db_stmt Update_stmt() {return Db_stmt_.new_update_(conn, Tbl_name, String_.Ary(Fld_fil_id), Fld_fil_owner_id, Fld_fil_name, Fld_fil_xtn_id, Fld_fil_ext_id, Fld_fil_bin_db_id, Fld_fil_size, Fld_fil_modified, Fld_fil_hash);}
|
||||
public void Update(int id, int owner_id, String name, int xtn_id, int ext_id, long size, DateAdp modified, String hash, int bin_db_id) {
|
||||
if (stmt_update == null) stmt_update = Update_stmt();
|
||||
try {
|
||||
stmt_update.Clear()
|
||||
.Val_int_(owner_id)
|
||||
.Val_str_(name)
|
||||
.Val_int_(xtn_id)
|
||||
.Val_int_(ext_id)
|
||||
.Val_int_(bin_db_id)
|
||||
.Val_long_(size)
|
||||
.Val_str_(Sqlite_engine_.X_date_to_str(modified))
|
||||
.Val_str_(hash)
|
||||
.Val_int_(id)
|
||||
.Val_int(owner_id)
|
||||
.Val_str(name)
|
||||
.Val_int(xtn_id)
|
||||
.Val_int(ext_id)
|
||||
.Val_int(bin_db_id)
|
||||
.Val_long(size)
|
||||
.Val_str(Sqlite_engine_.X_date_to_str(modified))
|
||||
.Val_str(hash)
|
||||
.Val_int(id)
|
||||
.Exec_update();
|
||||
} catch (Exception exc) {stmt_update = null; throw Err_.err_(exc, "stmt failed");} // must reset stmt, else next call will fail
|
||||
}
|
||||
@@ -73,15 +73,15 @@ public class Fsdb_fil_tbl {
|
||||
? (Db_qry)Db_qry_sql.rdr_("SELECT * FROM fsdb_fil INDEXED BY fsdb_fil__owner WHERE fil_owner_id = ? AND fil_name = ?;")
|
||||
: Db_qry_.select_().From_(Tbl_name).Cols_all_().Where_(gplx.criterias.Criteria_.And_many(Db_crt_.eq_(Fld_fil_owner_id, Int_.MinValue), Db_crt_.eq_(Fld_fil_name, "")))
|
||||
;
|
||||
return provider.Prepare(qry);
|
||||
return conn.New_stmt(qry);
|
||||
}
|
||||
public Fsdb_fil_itm Select_itm_by_name(int dir_id, String fil_name) {
|
||||
if (stmt_select_by_name == null) stmt_select_by_name = Select_by_name_stmt();
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
try {
|
||||
rdr = stmt_select_by_name.Clear()
|
||||
.Val_int_(dir_id)
|
||||
.Val_str_(fil_name)
|
||||
.Val_int(dir_id)
|
||||
.Val_str(fil_name)
|
||||
.Exec_select();
|
||||
if (rdr.MoveNextPeer())
|
||||
return load_(rdr);
|
||||
@@ -92,14 +92,14 @@ public class Fsdb_fil_tbl {
|
||||
}
|
||||
private Db_stmt Select_by_id_stmt() {
|
||||
Db_qry qry = Db_qry_.select_().From_(Tbl_name).Cols_all_().Where_(Db_crt_.eq_(Fld_fil_id, 0));
|
||||
return provider.Prepare(qry);
|
||||
return conn.New_stmt(qry);
|
||||
}
|
||||
public Fsdb_fil_itm Select_itm_by_id(int fil_id) {
|
||||
if (stmt_select_by_id == null) stmt_select_by_id = Select_by_id_stmt();
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
try {
|
||||
rdr = stmt_select_by_name.Clear()
|
||||
.Val_int_(fil_id)
|
||||
.Val_int(fil_id)
|
||||
.Exec_select();
|
||||
if (rdr.MoveNextPeer())
|
||||
return load_(rdr);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.fsdb; import gplx.*;
|
||||
import gplx.dbs.*; import gplx.xowa.files.fsdb.*;
|
||||
public class Fsdb_mnt_mgr implements GfoInvkAble {
|
||||
private Db_provider provider;
|
||||
private Db_conn conn;
|
||||
private Fsdb_cfg_tbl tbl_cfg;
|
||||
private Fsdb_db_abc_mgr[] ary; int ary_len = 0;
|
||||
public Gfo_usr_dlg Usr_dlg() {return usr_dlg;} public Fsdb_mnt_mgr Usr_dlg_(Gfo_usr_dlg v) {usr_dlg = v; return this;} private Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_.Null;
|
||||
@@ -38,15 +38,15 @@ public class Fsdb_mnt_mgr implements GfoInvkAble {
|
||||
public Fsdb_db_abc_mgr Abc_mgr_at(int i) {return ary[i];}
|
||||
private Fsdb_mnt_itm[] Db_load_or_make(Io_url cur_dir) {
|
||||
Bool_obj_ref created = Bool_obj_ref.n_();
|
||||
provider = Sqlite_engine_.Provider_load_or_make_(cur_dir.GenSubFil("wiki.mnt.sqlite3"), created);
|
||||
tbl_cfg = new Fsdb_cfg_tbl_sql().Ctor(provider, created.Val());
|
||||
conn = Sqlite_engine_.Conn_load_or_make_(cur_dir.GenSubFil("wiki.mnt.sqlite3"), created);
|
||||
tbl_cfg = new Fsdb_cfg_tbl_sql().Ctor(conn, created.Val());
|
||||
if (created.Val()) {
|
||||
Fsdb_mnt_tbl.Create_table(provider);
|
||||
Fsdb_mnt_tbl.Insert(provider, Mnt_idx_main, "fsdb.main", "fsdb.main");
|
||||
Fsdb_mnt_tbl.Insert(provider, Mnt_idx_user, "fsdb.user", "fsdb.user");
|
||||
Fsdb_mnt_tbl.Create_table(conn);
|
||||
Fsdb_mnt_tbl.Insert(conn, Mnt_idx_main, "fsdb.main", "fsdb.main");
|
||||
Fsdb_mnt_tbl.Insert(conn, Mnt_idx_user, "fsdb.user", "fsdb.user");
|
||||
tbl_cfg.Insert("core", "mnt.insert_idx", Int_.Xto_str(Mnt_idx_user));
|
||||
}
|
||||
return Fsdb_mnt_tbl.Select_all(provider);
|
||||
return Fsdb_mnt_tbl.Select_all(conn);
|
||||
}
|
||||
public Fsdb_db_bin_fil Bin_db_get(int mnt_id, int bin_db_id) {
|
||||
return ary[mnt_id].Bin_mgr().Get_at(bin_db_id);
|
||||
|
||||
@@ -18,31 +18,31 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.fsdb; import gplx.*;
|
||||
import gplx.dbs.*;
|
||||
public class Fsdb_mnt_tbl {
|
||||
public static void Create_table(Db_provider p) {
|
||||
public static void Create_table(Db_conn p) {
|
||||
Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);
|
||||
}
|
||||
public static void Insert(Db_provider p, int id, String name, String url) {
|
||||
public static void Insert(Db_conn p, int id, String name, String url) {
|
||||
Db_stmt stmt = Insert_stmt(p);
|
||||
try {Insert(stmt, id, name, url);}
|
||||
finally {stmt.Rls();}
|
||||
}
|
||||
private static Db_stmt Insert_stmt(Db_provider p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_mnt_id, Fld_mnt_name, Fld_mnt_url);}
|
||||
private static Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_mnt_id, Fld_mnt_name, Fld_mnt_url);}
|
||||
private static void Insert(Db_stmt stmt, int id, String name, String url) {
|
||||
stmt.Clear()
|
||||
.Val_int_(id)
|
||||
.Val_str_(name)
|
||||
.Val_str_(url)
|
||||
.Val_int(id)
|
||||
.Val_str(name)
|
||||
.Val_str(url)
|
||||
.Exec_insert();
|
||||
}
|
||||
public static Db_stmt Update_stmt(Db_provider p) {return Db_stmt_.new_update_(p, Tbl_name, String_.Ary(Fld_mnt_id), Fld_mnt_name, Fld_mnt_url);}
|
||||
public static Db_stmt Update_stmt(Db_conn p) {return Db_stmt_.new_update_(p, Tbl_name, String_.Ary(Fld_mnt_id), Fld_mnt_name, Fld_mnt_url);}
|
||||
public static void Update(Db_stmt stmt, int id, String name, String url) {
|
||||
stmt.Clear()
|
||||
.Val_str_(name)
|
||||
.Val_str_(url)
|
||||
.Val_int_(id)
|
||||
.Val_str(name)
|
||||
.Val_str(url)
|
||||
.Val_int(id)
|
||||
.Exec_update();
|
||||
}
|
||||
public static Fsdb_mnt_itm[] Select_all(Db_provider p) {
|
||||
public static Fsdb_mnt_itm[] Select_all(Db_conn p) {
|
||||
Db_qry qry = Db_qry_.select_().From_(Tbl_name);
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
ListAdp list = ListAdp_.new_();
|
||||
|
||||
@@ -18,15 +18,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.fsdb; import gplx.*;
|
||||
import gplx.dbs.*;
|
||||
public class Fsdb_xtn_thm_tbl {
|
||||
private Fsdb_db_atr_fil atr_fil; private Db_provider provider;
|
||||
private Fsdb_db_atr_fil atr_fil; private Db_conn conn;
|
||||
private Db_stmt stmt_insert, stmt_select_by_fil_w;
|
||||
public Fsdb_xtn_thm_tbl(Fsdb_db_atr_fil atr_fil, Db_provider provider, boolean created) {
|
||||
this.atr_fil = atr_fil; this.provider = provider;
|
||||
public Fsdb_xtn_thm_tbl(Fsdb_db_atr_fil atr_fil, Db_conn conn, boolean created) {
|
||||
this.atr_fil = atr_fil; this.conn = conn;
|
||||
if (created) Create_table();
|
||||
}
|
||||
private void Create_table() {
|
||||
Sqlite_engine_.Tbl_create(provider, Tbl_name, Tbl_sql);
|
||||
Sqlite_engine_.Idx_create(provider, Idx_name);
|
||||
Sqlite_engine_.Tbl_create(conn, Tbl_name, Tbl_sql);
|
||||
Sqlite_engine_.Idx_create(conn, Idx_name);
|
||||
}
|
||||
public void Rls() {
|
||||
if (stmt_insert != null) {stmt_insert.Rls(); stmt_insert = null;}
|
||||
@@ -41,28 +41,28 @@ public class Fsdb_xtn_thm_tbl {
|
||||
} private boolean schema_thm_page, schema_thm_page_init = true;
|
||||
private Db_stmt Make_stmt_insert() {
|
||||
return this.Schema_thm_page()
|
||||
? Db_stmt_.new_insert_(provider, Tbl_name, Fld_thm_id, Fld_thm_owner_id, Fld_thm_w, Fld_thm_h, Fld_thm_bin_db_id, Fld_thm_size, Fld_thm_modified, Fld_thm_hash, Fld_thm_time, Fld_thm_page)
|
||||
: Db_stmt_.new_insert_(provider, Tbl_name, Fld_thm_id, Fld_thm_owner_id, Fld_thm_w, Fld_thm_h, Fld_thm_bin_db_id, Fld_thm_size, Fld_thm_modified, Fld_thm_hash, Fld_thm_thumbtime)
|
||||
? Db_stmt_.new_insert_(conn, Tbl_name, Fld_thm_id, Fld_thm_owner_id, Fld_thm_w, Fld_thm_h, Fld_thm_bin_db_id, Fld_thm_size, Fld_thm_modified, Fld_thm_hash, Fld_thm_time, Fld_thm_page)
|
||||
: Db_stmt_.new_insert_(conn, Tbl_name, Fld_thm_id, Fld_thm_owner_id, Fld_thm_w, Fld_thm_h, Fld_thm_bin_db_id, Fld_thm_size, Fld_thm_modified, Fld_thm_hash, Fld_thm_thumbtime)
|
||||
;
|
||||
}
|
||||
public void Insert(int id, int thm_owner_id, int width, int height, double thumbtime, int page, int bin_db_id, long size, DateAdp modified, String hash) {
|
||||
if (stmt_insert == null) stmt_insert = Make_stmt_insert();
|
||||
try {
|
||||
stmt_insert.Clear()
|
||||
.Val_int_(id)
|
||||
.Val_int_(thm_owner_id)
|
||||
.Val_int_(width)
|
||||
.Val_int_(height)
|
||||
.Val_int_(bin_db_id)
|
||||
.Val_long_(size)
|
||||
.Val_str_(Sqlite_engine_.X_date_to_str(modified))
|
||||
.Val_str_(hash);
|
||||
.Val_int(id)
|
||||
.Val_int(thm_owner_id)
|
||||
.Val_int(width)
|
||||
.Val_int(height)
|
||||
.Val_int(bin_db_id)
|
||||
.Val_long(size)
|
||||
.Val_str(Sqlite_engine_.X_date_to_str(modified))
|
||||
.Val_str(hash);
|
||||
if (this.Schema_thm_page()) {
|
||||
stmt_insert.Val_double_ (gplx.xowa.files.Xof_doc_thumb.Db_save_double(thumbtime));
|
||||
stmt_insert.Val_int_ (gplx.xowa.files.Xof_doc_page.Db_save_int(page));
|
||||
stmt_insert.Val_double (gplx.xowa.files.Xof_doc_thumb.Db_save_double(thumbtime));
|
||||
stmt_insert.Val_int (gplx.xowa.files.Xof_doc_page.Db_save_int(page));
|
||||
}
|
||||
else
|
||||
stmt_insert.Val_int_(gplx.xowa.files.Xof_doc_thumb.Db_save_int(thumbtime));
|
||||
stmt_insert.Val_int(gplx.xowa.files.Xof_doc_thumb.Db_save_int(thumbtime));
|
||||
stmt_insert.Exec_insert();
|
||||
} catch (Exception exc) {stmt_insert = null; throw Err_.err_(exc, "stmt failed");} // must reset stmt, else next call will fail
|
||||
}
|
||||
@@ -74,22 +74,22 @@ public class Fsdb_xtn_thm_tbl {
|
||||
: gplx.criterias.Criteria_.And_many(Db_crt_.eq_(Fld_thm_owner_id, Int_.MinValue), Db_crt_.eq_(Fld_thm_w, Int_.MinValue), Db_crt_.eq_(Fld_thm_thumbtime, Int_.MinValue))
|
||||
;
|
||||
qry.Where_(crt);
|
||||
return provider.Prepare(qry);
|
||||
return conn.New_stmt(qry);
|
||||
}
|
||||
public boolean Select_itm_by_fil_width(int owner_id, Fsdb_xtn_thm_itm thm) {
|
||||
if (stmt_select_by_fil_w == null) stmt_select_by_fil_w = Select_by_fil_w_stmt();
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
try {
|
||||
stmt_select_by_fil_w.Clear()
|
||||
.Val_int_(owner_id)
|
||||
.Val_int_(thm.Width())
|
||||
.Val_int(owner_id)
|
||||
.Val_int(thm.Width())
|
||||
;
|
||||
if (this.Schema_thm_page()) {
|
||||
stmt_select_by_fil_w.Val_double_(gplx.xowa.files.Xof_doc_thumb.Db_save_double(thm.Thumbtime()));
|
||||
stmt_select_by_fil_w.Val_int_(gplx.xowa.files.Xof_doc_page.Db_save_int(thm.Page()));
|
||||
stmt_select_by_fil_w.Val_double(gplx.xowa.files.Xof_doc_thumb.Db_save_double(thm.Thumbtime()));
|
||||
stmt_select_by_fil_w.Val_int(gplx.xowa.files.Xof_doc_page.Db_save_int(thm.Page()));
|
||||
}
|
||||
else {
|
||||
stmt_select_by_fil_w.Val_int_(gplx.xowa.files.Xof_doc_thumb.Db_save_int(thm.Thumbtime()));
|
||||
stmt_select_by_fil_w.Val_int(gplx.xowa.files.Xof_doc_thumb.Db_save_int(thm.Thumbtime()));
|
||||
}
|
||||
rdr = stmt_select_by_fil_w.Exec_select();
|
||||
if (rdr.MoveNextPeer()) {
|
||||
|
||||
21
400_xowa/src/gplx/intl/Gfo_app.java
Normal file
21
400_xowa/src/gplx/intl/Gfo_app.java
Normal file
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.intl; import gplx.*;
|
||||
public class Gfo_app {
|
||||
public Gfo_i18n_mgr I18n_mgr() {return i18n_mgr;} private Gfo_i18n_mgr i18n_mgr = new Gfo_i18n_mgr();
|
||||
}
|
||||
42
400_xowa/src/gplx/intl/Gfo_i18n_itm.java
Normal file
42
400_xowa/src/gplx/intl/Gfo_i18n_itm.java
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.intl; import gplx.*;
|
||||
class Gfo_i18n_itm {
|
||||
public Gfo_i18n_itm(int src, byte[] key, byte[] val, boolean val_fmt_exists, Gfo_i18n_val_cmd val_cmd) {
|
||||
this.src = src; this.key = key; this.val = val; this.val_fmt_exists = val_fmt_exists; this.val_cmd = val_cmd;
|
||||
}
|
||||
public int Src() {return src;} private final int src;
|
||||
public byte[] Key() {return key;} private final byte[] key;
|
||||
public byte[] Val() {return val;} private final byte[] val;
|
||||
public boolean Val_fmt_exists() {return val_fmt_exists;} private final boolean val_fmt_exists;
|
||||
public Gfo_i18n_val_cmd Val_cmd() {return val_cmd;} private final Gfo_i18n_val_cmd val_cmd;
|
||||
public byte[] Bld_none() {
|
||||
return val_cmd == null ? val : val_cmd.Process(src, key, val);
|
||||
}
|
||||
public byte[] Bld_many(Object... args) {
|
||||
byte[] rv = null;
|
||||
synchronized (tmp_fmtr) {
|
||||
tmp_fmtr.Fmt_(val);
|
||||
tmp_fmtr.Bld_bfr_many(tmp_bfr, args);
|
||||
rv = tmp_bfr.Xto_bry_and_clear();
|
||||
}
|
||||
return val_cmd == null ? rv : val_cmd.Process(src, key, rv);
|
||||
}
|
||||
private static final Bry_fmtr tmp_fmtr = Bry_fmtr.new_();
|
||||
private static final Bry_bfr tmp_bfr = Bry_bfr.reset_(255);
|
||||
}
|
||||
41
400_xowa/src/gplx/intl/Gfo_i18n_mgr.java
Normal file
41
400_xowa/src/gplx/intl/Gfo_i18n_mgr.java
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.intl; import gplx.*;
|
||||
public class Gfo_i18n_mgr {
|
||||
public String Dflt() {return dflt;} private String dflt = "en";
|
||||
public Gfo_i18n_mgr Add_txt_dflt(String key, String val) {return this;}
|
||||
public Gfo_i18n_mgr Add_txt_one(String key, String lng, String val) {return this;}
|
||||
public Gfo_i18n_mgr Add_txt_many(String key, String... ary) {return this;}
|
||||
}
|
||||
class Gfo_i18n_lng {
|
||||
private Hash_adp_bry hash = Hash_adp_bry.cs_();
|
||||
public Gfo_i18n_lng(String lng) {this.lng = lng;}
|
||||
public String Lng() {return lng;} private final String lng;
|
||||
public void Add(int src, byte[] key, byte[] val, boolean val_fmt_exists, Gfo_i18n_val_cmd val_cmd) {
|
||||
Gfo_i18n_itm itm = new Gfo_i18n_itm(src, key, val, val_fmt_exists, val_cmd);
|
||||
hash.Add_bry_obj(key, itm);
|
||||
}
|
||||
public byte[] Bld_to_bry_none(byte[] key) {
|
||||
Gfo_i18n_itm itm = (Gfo_i18n_itm)hash.Get_by_bry(key);
|
||||
return itm.Bld_none();
|
||||
}
|
||||
public byte[] Bld_to_bry_many(byte[] key, Object... args) {
|
||||
Gfo_i18n_itm itm = (Gfo_i18n_itm)hash.Get_by_bry(key);
|
||||
return itm.Bld_many(args);
|
||||
}
|
||||
}
|
||||
21
400_xowa/src/gplx/intl/Gfo_i18n_val_cmd.java
Normal file
21
400_xowa/src/gplx/intl/Gfo_i18n_val_cmd.java
Normal file
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.intl; import gplx.*;
|
||||
interface Gfo_i18n_val_cmd {
|
||||
byte[] Process(int src, byte[] key, byte[] val);
|
||||
}
|
||||
42
400_xowa/src/gplx/threads/Gfo_async_cmd_itm.java
Normal file
42
400_xowa/src/gplx/threads/Gfo_async_cmd_itm.java
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.threads; import gplx.*;
|
||||
public class Gfo_async_cmd_itm implements GfoInvkAble {
|
||||
private GfoInvkAble invk; private String invk_key; private GfoMsg msg = GfoMsg_.new_cast_("");
|
||||
public Gfo_async_cmd_itm Init(GfoInvkAble invk, String invk_key, Object... args) {
|
||||
this.invk = invk; this.invk_key = invk_key;
|
||||
msg.Args_reset();
|
||||
msg.Clear();
|
||||
int len = args.length;
|
||||
for (int i = 0; i < len; i += 2) {
|
||||
String key = (String)args[i];
|
||||
Object val = args[i + 1];
|
||||
msg.Add(key, val);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
public void Exec() {
|
||||
GfoInvkAble_.InvkCmd_msg(invk, invk_key, msg);
|
||||
}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_exec)) Exec();
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
return this;
|
||||
} private static final String Invk_exec = "exec";
|
||||
public static final Gfo_async_cmd_itm[] Ary_empty = new Gfo_async_cmd_itm[0];
|
||||
}
|
||||
34
400_xowa/src/gplx/threads/Gfo_async_cmd_mkr.java
Normal file
34
400_xowa/src/gplx/threads/Gfo_async_cmd_mkr.java
Normal file
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.threads; import gplx.*;
|
||||
class Gfo_async_cmd_mkr {
|
||||
// private Gfo_async_cmd_itm[] free = Gfo_async_cmd_itm.Ary_empty, used = Gfo_async_cmd_itm.Ary_empty;
|
||||
// private int free_bgn = 0, free_end = 0, ary_len = 0;
|
||||
// public void Resize(int v) {
|
||||
// free = (Gfo_async_cmd_itm[])Array_.Resize(free, v);
|
||||
// used = (Gfo_async_cmd_itm[])Array_.Resize(used, v);
|
||||
// ary_len = v;
|
||||
// }
|
||||
public Gfo_async_cmd_itm Get(GfoInvkAble invk, String invk_key, Object... args) {
|
||||
Gfo_async_cmd_itm rv = new Gfo_async_cmd_itm();
|
||||
rv.Init(invk, invk_key, args);
|
||||
return rv;
|
||||
}
|
||||
public void Rls(Gfo_async_cmd_itm cmd) {
|
||||
}
|
||||
}
|
||||
57
400_xowa/src/gplx/threads/Gfo_async_mgr.java
Normal file
57
400_xowa/src/gplx/threads/Gfo_async_mgr.java
Normal file
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.threads; import gplx.*;
|
||||
public class Gfo_async_mgr implements GfoInvkAble {
|
||||
private ListAdp queue = ListAdp_.new_();
|
||||
private Bool_obj_ref running = Bool_obj_ref.n_();
|
||||
private Gfo_async_cmd_mkr cmd_mkr = new Gfo_async_cmd_mkr();
|
||||
public void Queue(GfoInvkAble invk, String invk_key, Object... args) {
|
||||
Gfo_async_cmd_itm cmd = cmd_mkr.Get(invk, invk_key, args);
|
||||
synchronized (queue) {
|
||||
queue.Add(cmd);
|
||||
}
|
||||
synchronized (running) {
|
||||
if (running.Val_n()) {
|
||||
running.Val_y_();
|
||||
gplx.threads.ThreadAdp_.invk_(Invk_run, this, Invk_run).Start();
|
||||
}
|
||||
}
|
||||
}
|
||||
public void Run() {
|
||||
Gfo_async_cmd_itm cmd = null;
|
||||
try {
|
||||
while (true) {
|
||||
synchronized (queue) {
|
||||
if (queue.Count() == 0) break;
|
||||
cmd = (Gfo_async_cmd_itm)ListAdp_.Pop(queue);
|
||||
cmd.Exec();
|
||||
}
|
||||
}
|
||||
}
|
||||
finally {
|
||||
synchronized (running) {
|
||||
running.Val_n_();
|
||||
}
|
||||
}
|
||||
}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_run)) Run();
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
return this;
|
||||
} private static final String Invk_run = "run";
|
||||
}
|
||||
@@ -31,7 +31,7 @@ public class Xoa_app implements GfoInvkAble {
|
||||
cfg_mgr = new Xoa_cfg_mgr(this);
|
||||
api_root = new Xoapi_root(this);
|
||||
url_cmd_eval = new Xoa_fsys_eval(this);
|
||||
fsys_mgr = new Xoa_fsys_mgr(root_dir, bin_dir_name);
|
||||
fsys_mgr = new Xoa_fsys_mgr(bin_dir_name, root_dir);
|
||||
launcher = new Launcher_app_mgr(this);
|
||||
fsys_mgr.Init_by_app(launcher);
|
||||
user = new Xou_user(this, user_dir);
|
||||
@@ -129,6 +129,7 @@ public class Xoa_app implements GfoInvkAble {
|
||||
public Xof_math_subst_regy Math_subst_regy() {return math_subst_regy;} private Xof_math_subst_regy math_subst_regy = new Xof_math_subst_regy();
|
||||
public Gfo_usr_dlg Gui_wtr() {return gui_mgr.Browser_win().Usr_dlg();}
|
||||
public Launcher_app_mgr Launcher() {return launcher;} private Launcher_app_mgr launcher;
|
||||
public Gfo_async_mgr Async_mgr() {return async_mgr;} private Gfo_async_mgr async_mgr = new Gfo_async_mgr();
|
||||
|
||||
public Xoi_setup_mgr Setup_mgr() {return setup_mgr;} private Xoi_setup_mgr setup_mgr;
|
||||
public Gfo_msg_log Msg_log() {return msg_log;} private Gfo_msg_log msg_log = new Gfo_msg_log(Xoa_app_.Name);
|
||||
|
||||
@@ -24,7 +24,7 @@ public class Xoa_app_ {
|
||||
boot_mgr.Run(args);
|
||||
}
|
||||
public static final String Name = "xowa";
|
||||
public static final String Version = "1.11.3.1";
|
||||
public static final String Version = "2.1.4.1";
|
||||
public static String Build_date = "2012-12-30 00:00:00";
|
||||
public static String Op_sys;
|
||||
public static String User_agent = "";
|
||||
@@ -36,18 +36,6 @@ public class Xoa_app_ {
|
||||
rv.Log_wtr().Queue_enabled_(true);
|
||||
return rv;
|
||||
}
|
||||
public static void Run_viewer() {
|
||||
Io_url root_dir = Io_url_.new_dir_("J:\\gplx\\xowa\\");
|
||||
Xoav_app app = new Xoav_app(Gfo_usr_dlg_._, root_dir, "drd");
|
||||
app.Wiki_mgr().Load_default();
|
||||
|
||||
Xowv_wiki wiki = app.Wiki_mgr().Get_by_domain(Bry_.new_ascii_("simple.wikibooks.org"));
|
||||
Hdump_page hpg = new Hdump_page();
|
||||
wiki.Hdump_mgr().Load(hpg, Bry_.new_utf8_("Main_Page"));
|
||||
String html = String_.new_utf8_(hpg.Page_body());
|
||||
ConsoleAdp._.WriteLine(html);
|
||||
ConsoleAdp._.ReadLine("");
|
||||
}
|
||||
public static final byte Mode_console = 0, Mode_gui = 1, Mode_http = 2;
|
||||
}
|
||||
class Xoa_app_boot_mgr {
|
||||
|
||||
@@ -17,29 +17,37 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.apps.fsys; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*;
|
||||
public class Xoa_fsys_mgr implements GfoInvkAble {
|
||||
public Xoa_fsys_mgr(Io_url root_dir, String plat_name) {
|
||||
public Xoa_fsys_mgr() {} // DRD
|
||||
public Xoa_fsys_mgr(String plat_name, Io_url root_dir) {
|
||||
Init_by_boot(plat_name, root_dir);
|
||||
}
|
||||
public Io_url Root_dir() {return root_dir;} private Io_url root_dir;
|
||||
public byte[] Root_dir_bry() {return root_dir_bry;} private byte[] root_dir_bry;
|
||||
public Io_url File_dir() {return file_dir;} private Io_url file_dir;
|
||||
public Io_url Wiki_dir() {return wiki_dir;} private Io_url wiki_dir;
|
||||
public Io_url Bin_plat_dir() {return bin_plat_dir;} private Io_url bin_plat_dir;
|
||||
public Io_url Bin_any_dir() {return bin_any_dir;} private Io_url bin_any_dir;
|
||||
public Io_url Bin_xowa_dir() {return bin_any_dir.GenSubDir("xowa");}
|
||||
public Io_url Bin_xtns_dir() {return bin_xtns_dir;} private Io_url bin_xtns_dir;
|
||||
public Io_url Cfg_lang_core_dir() {return cfg_lang_core_dir;} private Io_url cfg_lang_core_dir;
|
||||
public Io_url Cfg_wiki_core_dir() {return cfg_wiki_core_dir;} private Io_url cfg_wiki_core_dir;
|
||||
public Io_url Bin_data_os_cfg_fil() {return bin_plat_dir.GenSubFil_nest("xowa", "cfg", Xoa_gfs_mgr.Cfg_os);}
|
||||
public void Init_by_boot(String plat_name, Io_url root_dir) {
|
||||
this.root_dir = root_dir;
|
||||
root_dir_bry = root_dir.To_http_file_bry();
|
||||
file_dir = root_dir.GenSubDir("file");
|
||||
wiki_dir = root_dir.GenSubDir("wiki");
|
||||
bin_plat_dir = root_dir.GenSubDir("bin").GenSubDir(plat_name);
|
||||
bin_any_dir = root_dir.GenSubDir("bin").GenSubDir("any");
|
||||
bin_xtns_dir = bin_any_dir.GenSubDir_nest("xowa", "xtns");
|
||||
cfg_lang_core_dir = bin_any_dir.GenSubDir_nest("xowa", "cfg", "lang", "core");
|
||||
cfg_wiki_core_dir = bin_any_dir.GenSubDir_nest("xowa", "cfg", "wiki", "core");
|
||||
Wiki_dir_ (root_dir.GenSubDir("wiki"));
|
||||
}
|
||||
public Io_url Root_dir() {return root_dir;} private final Io_url root_dir;
|
||||
public byte[] Root_dir_bry() {return root_dir_bry;} private final byte[] root_dir_bry;
|
||||
public Io_url File_dir() {return file_dir;} private final Io_url file_dir;
|
||||
public Io_url Wiki_dir() {return wiki_dir;} public Xoa_fsys_mgr Wiki_dir_(Io_url v) {wiki_dir = v; return this;} private Io_url wiki_dir;
|
||||
public Io_url Bin_plat_dir() {return bin_plat_dir;} private final Io_url bin_plat_dir;
|
||||
public Io_url Bin_any_dir() {return bin_any_dir;} private final Io_url bin_any_dir;
|
||||
public Io_url Bin_xowa_dir() {return bin_any_dir.GenSubDir("xowa");}
|
||||
public Io_url Bin_xtns_dir() {return bin_xtns_dir;} private final Io_url bin_xtns_dir;
|
||||
public Io_url Cfg_lang_core_dir() {return cfg_lang_core_dir;} private final Io_url cfg_lang_core_dir;
|
||||
public Io_url Cfg_wiki_core_dir() {return cfg_wiki_core_dir;} private final Io_url cfg_wiki_core_dir;
|
||||
public Io_url Bin_data_os_cfg_fil() {return bin_plat_dir.GenSubFil_nest("xowa", "cfg", Xoa_gfs_mgr.Cfg_os);}
|
||||
public void Init_by_app(GfoInvkAble app_mgr_invk) {
|
||||
public Xoa_fsys_mgr Wiki_dir_(Io_url v) {
|
||||
wiki_dir = v;
|
||||
return this;
|
||||
}
|
||||
public void Init_by_app(GfoInvkAble app_mgr_invk) {// for gfs and app.launcher
|
||||
this.app_mgr_invk = app_mgr_invk;
|
||||
} private GfoInvkAble app_mgr_invk;
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
|
||||
@@ -37,7 +37,7 @@ public class Db_mgr_fxt {
|
||||
Xodb_page_tbl tbl_page = wiki.Db_mgr_as_sql().Tbl_page();
|
||||
Db_stmt stmt = Db_stmt_.Null;
|
||||
try {
|
||||
stmt = tbl_page.Insert_stmt(wiki.Db_mgr_as_sql().Fsys_mgr().Provider_page());
|
||||
stmt = tbl_page.Insert_stmt(wiki.Db_mgr_as_sql().Fsys_mgr().Conn_page());
|
||||
int len = ttls.length;
|
||||
DateAdp modified_on = Tfds.Now_time0_add_min(0);
|
||||
for (int i = 0; i < len; i++) {
|
||||
@@ -127,18 +127,18 @@ public class Db_mgr_fxt {
|
||||
public void Init_db_sqlite() {Init_db_sqlite(Xoa_test_.Url_wiki_enwiki().GenSubFil_nest("en.wikipedia.org.sqlite3"));}
|
||||
public void Init_db_sqlite(Io_url url) {
|
||||
Xow_wiki wiki = this.Wiki();
|
||||
Db_provider_pool._.Clear();
|
||||
Db_conn_pool_old._.Clear();
|
||||
Xodb_mgr_sql db_mgr = wiki.Db_mgr_create_as_sql();
|
||||
db_mgr.Data_storage_format_(gplx.ios.Io_stream_.Tid_file);
|
||||
db_mgr.Init_by_ns_map("");
|
||||
Db_provider provider = db_mgr.Fsys_mgr().Provider_core();
|
||||
provider.Exec_qry(Db_qry_delete.new_all_("xowa_cfg"));
|
||||
provider.Exec_qry(Db_qry_delete.new_all_("xowa_db"));
|
||||
provider.Exec_qry(Db_qry_delete.new_all_("xowa_ns"));
|
||||
provider.Exec_qry(Db_qry_delete.new_all_("page"));
|
||||
provider.Exec_qry(Db_qry_delete.new_all_("text"));
|
||||
provider.Exec_qry(Db_qry_delete.new_all_("category"));
|
||||
provider.Exec_qry(Db_qry_delete.new_all_("categorylinks"));
|
||||
Db_conn conn = db_mgr.Fsys_mgr().Conn_core();
|
||||
conn.Exec_qry(Db_qry_delete.new_all_("xowa_cfg"));
|
||||
conn.Exec_qry(Db_qry_delete.new_all_("xowa_db"));
|
||||
conn.Exec_qry(Db_qry_delete.new_all_("xowa_ns"));
|
||||
conn.Exec_qry(Db_qry_delete.new_all_("page"));
|
||||
conn.Exec_qry(Db_qry_delete.new_all_("text"));
|
||||
conn.Exec_qry(Db_qry_delete.new_all_("category"));
|
||||
conn.Exec_qry(Db_qry_delete.new_all_("categorylinks"));
|
||||
} String dsv_db;
|
||||
public void Init_db_tdb() {
|
||||
Io_mgr._.InitEngine_mem();
|
||||
|
||||
@@ -61,18 +61,18 @@ class Xob_diff_regy_sql_runner {
|
||||
public void Run_sql(Xoa_app app) {
|
||||
Xow_wiki wiki = app.Wiki_mgr().Get_by_key_or_null(Bry_.new_utf8_(wiki_domain));
|
||||
app.Usr_dlg().Prog_many("", "", "running sql: url=~{0}", url.NameAndExt());
|
||||
Db_provider provider = Get_provider(wiki, fsdb_db_id, fsdb_db_tid);
|
||||
provider.Exec_sql(Io_mgr._.LoadFilStr(url));
|
||||
Db_conn conn = Get_provider(wiki, fsdb_db_id, fsdb_db_tid);
|
||||
conn.Exec_sql(Io_mgr._.LoadFilStr(url));
|
||||
if (fsdb_db_tid == Fsdb_db_tid_.Tid_bin)
|
||||
provider.Exec_sql("VACUUM;");
|
||||
conn.Exec_sql("VACUUM;");
|
||||
}
|
||||
public static Db_provider Get_provider(Xow_wiki wiki, int fsdb_db_id, byte fsdb_db_tid) {
|
||||
public static Db_conn Get_provider(Xow_wiki wiki, int fsdb_db_id, byte fsdb_db_tid) {
|
||||
wiki.File_mgr().Fsdb_mgr().Init_by_wiki(wiki);
|
||||
Fsdb_db_abc_mgr abc_mgr = wiki.File_mgr().Fsdb_mgr().Mnt_mgr().Abc_mgr_at(0);
|
||||
if (fsdb_db_tid == Fsdb_db_tid_.Tid_bin)
|
||||
return abc_mgr.Bin_mgr().Get_at(fsdb_db_id).Provider();
|
||||
return abc_mgr.Bin_mgr().Get_at(fsdb_db_id).Conn();
|
||||
else if (fsdb_db_tid == Fsdb_db_tid_.Tid_atr)
|
||||
return abc_mgr.Atr_mgr().Get_at(0).Provider();
|
||||
return abc_mgr.Atr_mgr().Get_at(0).Conn();
|
||||
else
|
||||
throw Err_.unhandled(fsdb_db_tid);
|
||||
}
|
||||
|
||||
@@ -26,12 +26,12 @@ public class Xob_diff_regy_make_cmd extends Xob_itm_basic_base implements Xob_cm
|
||||
public void Cmd_end() {}
|
||||
public void Cmd_print() {}
|
||||
private void Exec_main() {
|
||||
Db_provider make_db_provider = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Provider();
|
||||
Db_conn make_db_provider = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
|
||||
this.Make_join_indexes(make_db_provider);
|
||||
this.Make_diff_regy(make_db_provider);
|
||||
this.Make_delete_sql(make_db_provider);
|
||||
}
|
||||
private void Make_join_indexes(Db_provider make_db_provider) {
|
||||
private void Make_join_indexes(Db_conn make_db_provider) {
|
||||
try {
|
||||
Sqlite_engine_.Idx_create(make_db_provider, Xob_diff_regy_tbl.Idx_fsdb_regy__join);
|
||||
Sqlite_engine_.Idx_create(make_db_provider, Xob_diff_regy_tbl.Idx_xfer_regy__join);
|
||||
@@ -40,12 +40,12 @@ public class Xob_diff_regy_make_cmd extends Xob_itm_basic_base implements Xob_cm
|
||||
app.Usr_dlg().Warn_many("", "", "error while making indexes: err=~{0}", Err_.Message_gplx(exc));
|
||||
}
|
||||
}
|
||||
private void Make_diff_regy(Db_provider make_db_provider) {
|
||||
private void Make_diff_regy(Db_conn make_db_provider) {
|
||||
Sqlite_engine_.Tbl_create_and_delete(make_db_provider, Xob_diff_regy_tbl.Tbl_name, Xob_diff_regy_tbl.Tbl_sql);
|
||||
make_db_provider.Exec_sql(Xob_diff_regy_tbl.Make_diff_regy);
|
||||
Sqlite_engine_.Idx_create(make_db_provider, Xob_diff_regy_tbl.Idx_diff_regy__load);
|
||||
}
|
||||
private void Make_delete_sql(Db_provider make_db_provider) {
|
||||
private void Make_delete_sql(Db_conn make_db_provider) {
|
||||
DataRdr rdr = make_db_provider.Exec_sql_as_rdr(Xob_diff_regy_tbl.Make_deletes);
|
||||
int cur_db_id = -1, cur_count = 0;
|
||||
Bry_bfr atr_bfr = Bry_bfr.new_(), bin_bfr = Bry_bfr.new_();
|
||||
|
||||
@@ -30,7 +30,7 @@ public class Xob_fsdb_make extends Xob_itm_basic_base implements Xob_cmd {
|
||||
private byte[] wiki_key;
|
||||
private Xobu_poll_mgr poll_mgr; private int poll_interval;
|
||||
private long time_bgn;
|
||||
private Xodb_xowa_cfg_tbl tbl_cfg; private Db_provider provider; private Db_stmt db_select_stmt;
|
||||
private Xodb_xowa_cfg_tbl tbl_cfg; private Db_conn conn; private Db_stmt db_select_stmt;
|
||||
private Xof_bin_mgr src_mgr;
|
||||
private Xof_fsdb_mgr_sql trg_fsdb_mgr; private Fsdb_mnt_mgr trg_mnt_mgr;
|
||||
private ListAdp temp_files = ListAdp_.new_();
|
||||
@@ -69,7 +69,7 @@ public class Xob_fsdb_make extends Xob_itm_basic_base implements Xob_cmd {
|
||||
trg_fsdb_mgr.Txn_save();
|
||||
trg_fsdb_mgr.Rls(); // save changes and rls all connections
|
||||
db_select_stmt.Rls();
|
||||
provider.Conn_term();
|
||||
conn.Conn_term();
|
||||
}
|
||||
public void Cmd_print() {}
|
||||
private int db_reset_tries_count = 0, db_reset_tries_max = 5;
|
||||
@@ -79,7 +79,7 @@ public class Xob_fsdb_make extends Xob_itm_basic_base implements Xob_cmd {
|
||||
ListAdp list = ListAdp_.new_();
|
||||
boolean loop = true;
|
||||
time_bgn = Env_.TickCount();
|
||||
usr_dlg.Note_many("", "", "total pending: ~{0}", Xob_xfer_regy_tbl.Select_total_pending(provider));
|
||||
usr_dlg.Note_many("", "", "total pending: ~{0}", Xob_xfer_regy_tbl.Select_total_pending(conn));
|
||||
this.Txn_open();
|
||||
while (loop) {
|
||||
byte rslt = Select_ttls(list);
|
||||
@@ -120,12 +120,12 @@ public class Xob_fsdb_make extends Xob_itm_basic_base implements Xob_cmd {
|
||||
}
|
||||
private void Init_db(boolean chk_reset) {
|
||||
Xodb_db_file db_file = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir());
|
||||
provider = db_file.Provider();
|
||||
tbl_cfg = new Xodb_xowa_cfg_tbl().Provider_(provider);
|
||||
conn = db_file.Conn();
|
||||
tbl_cfg = new Xodb_xowa_cfg_tbl().Conn_(conn);
|
||||
if (reset_db && chk_reset) {
|
||||
provider.Exec_qry(Db_qry_.delete_tbl_(Xodb_xowa_cfg_tbl.Tbl_name));
|
||||
conn.Exec_qry(Db_qry_.delete_tbl_(Xodb_xowa_cfg_tbl.Tbl_name));
|
||||
}
|
||||
db_select_stmt = Xob_xfer_regy_tbl.Select_by_page_id_stmt(provider);
|
||||
db_select_stmt = Xob_xfer_regy_tbl.Select_by_page_id_stmt(conn);
|
||||
}
|
||||
private boolean Init_bmk(Xodb_xowa_cfg_tbl tbl_cfg) {
|
||||
if (!resume_enabled) { // clear cfg entries if resume disabled; note that disabled by default; DATE:2014-10-24
|
||||
@@ -162,7 +162,7 @@ public class Xob_fsdb_make extends Xob_itm_basic_base implements Xob_cmd {
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
boolean pages_found = false, links_found = false;
|
||||
try {
|
||||
rdr = Xob_xfer_regy_tbl.Select_by_lnki_page_id(provider, page_id_val, select_interval);
|
||||
rdr = Xob_xfer_regy_tbl.Select_by_lnki_page_id(conn, page_id_val, select_interval);
|
||||
while (rdr.MoveNextPeer()) {
|
||||
pages_found = true; // at least one page found; set true
|
||||
Xodb_tbl_oimg_xfer_itm itm = Xodb_tbl_oimg_xfer_itm.new_rdr_(rdr);
|
||||
@@ -250,14 +250,14 @@ public class Xob_fsdb_make extends Xob_itm_basic_base implements Xob_cmd {
|
||||
this.Txn_open();
|
||||
}
|
||||
private void Txn_open() {
|
||||
tbl_cfg.Provider().Txn_mgr().Txn_bgn_if_none();
|
||||
tbl_cfg.Conn().Txn_mgr().Txn_bgn_if_none();
|
||||
trg_mnt_mgr.Txn_open();
|
||||
}
|
||||
private void Txn_save() {
|
||||
usr_dlg.Prog_many("", "", "committing data: count=~{0} failed=~{1}", exec_count, exec_fail);
|
||||
tbl_cfg.Update(Cfg_fsdb_make, Cfg_page_id_bmk, page_id_val);
|
||||
tbl_cfg.Update(Cfg_fsdb_make, Cfg_lnki_id_bmk, lnki_id_val);
|
||||
tbl_cfg.Provider().Txn_mgr().Txn_end_all();
|
||||
tbl_cfg.Conn().Txn_mgr().Txn_end_all();
|
||||
trg_mnt_mgr.Txn_save();
|
||||
if (exit_after_commit)
|
||||
exit_now = true;
|
||||
|
||||
@@ -22,9 +22,9 @@ public class Xob_lnki_regy_cmd extends Xob_itm_basic_base implements Xob_cmd {
|
||||
public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.lnki_regy";
|
||||
public void Cmd_ini(Xob_bldr bldr) {}
|
||||
public void Cmd_bgn(Xob_bldr bldr) {
|
||||
Db_provider provider = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Provider();
|
||||
Xob_lnki_regy_tbl.Create_table(provider);
|
||||
Xob_lnki_regy_tbl.Create_data(usr_dlg, provider, Xob_lnki_temp_wkr.Wiki_ns_for_file_is_case_match_all(wiki));
|
||||
Db_conn conn = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
|
||||
Xob_lnki_regy_tbl.Create_table(conn);
|
||||
Xob_lnki_regy_tbl.Create_data(usr_dlg, conn, Xob_lnki_temp_wkr.Wiki_ns_for_file_is_case_match_all(wiki));
|
||||
}
|
||||
public void Cmd_run() {}
|
||||
public void Cmd_end() {}
|
||||
|
||||
@@ -18,8 +18,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
|
||||
import gplx.dbs.*; import gplx.xowa.dbs.*;
|
||||
class Xob_lnki_regy_tbl {
|
||||
public static void Create_table(Db_provider p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql);}
|
||||
public static void Create_data(Gfo_usr_dlg usr_dlg, Db_provider p, boolean wiki_ns_for_file_is_case_match_all) {
|
||||
public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql);}
|
||||
public static void Create_data(Gfo_usr_dlg usr_dlg, Db_conn p, boolean wiki_ns_for_file_is_case_match_all) {
|
||||
p.Exec_sql(Sql_create_data);
|
||||
Sqlite_engine_.Idx_create(usr_dlg, p, "lnki_regy", Idx_ttl);
|
||||
if (wiki_ns_for_file_is_case_match_all)
|
||||
|
||||
@@ -18,21 +18,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
|
||||
import gplx.dbs.*;
|
||||
class Xob_lnki_temp_tbl {
|
||||
public static void Create_table(Db_provider p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);}
|
||||
public static Db_stmt Insert_stmt(Db_provider p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_lnki_page_id, Fld_lnki_ttl, Fld_lnki_commons_ttl, Fld_lnki_ext, Fld_lnki_type, Fld_lnki_src_tid, Fld_lnki_w, Fld_lnki_h, Fld_lnki_upright, Fld_lnki_time, Fld_lnki_page);}
|
||||
public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);}
|
||||
public static Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_lnki_page_id, Fld_lnki_ttl, Fld_lnki_commons_ttl, Fld_lnki_ext, Fld_lnki_type, Fld_lnki_src_tid, Fld_lnki_w, Fld_lnki_h, Fld_lnki_upright, Fld_lnki_time, Fld_lnki_page);}
|
||||
public static void Insert(Db_stmt stmt, int page_id, byte[] ttl, byte[] ttl_commons, byte ext_id, byte img_type, byte lnki_src_tid, int w, int h, double upright, double thumbtime, int page) {
|
||||
stmt.Clear()
|
||||
.Val_int_(page_id)
|
||||
.Val_str_by_bry_(ttl)
|
||||
.Val_str_by_bry_(ttl_commons)
|
||||
.Val_byte_(ext_id)
|
||||
.Val_byte_(img_type)
|
||||
.Val_int_(lnki_src_tid)
|
||||
.Val_int_(w)
|
||||
.Val_int_(h)
|
||||
.Val_double_(upright)
|
||||
.Val_double_(gplx.xowa.files.Xof_doc_thumb.Db_save_double(thumbtime))
|
||||
.Val_int_(page)
|
||||
.Val_int(page_id)
|
||||
.Val_bry_as_str(ttl)
|
||||
.Val_bry_as_str(ttl_commons)
|
||||
.Val_byte(ext_id)
|
||||
.Val_byte(img_type)
|
||||
.Val_int(lnki_src_tid)
|
||||
.Val_int(w)
|
||||
.Val_int(h)
|
||||
.Val_double(upright)
|
||||
.Val_double(gplx.xowa.files.Xof_doc_thumb.Db_save_double(thumbtime))
|
||||
.Val_int(page)
|
||||
.Exec_insert();
|
||||
}
|
||||
public static final String Tbl_name = "lnki_temp"
|
||||
|
||||
@@ -22,7 +22,7 @@ import gplx.xowa.bldrs.oimgs.*; import gplx.fsdb.*; import gplx.xowa.files.*; im
|
||||
import gplx.xowa.parsers.lnkis.redlinks.*; import gplx.xowa.parsers.logs.*; import gplx.xowa.hdumps.*;
|
||||
import gplx.xowa.xtns.scribunto.*; import gplx.xowa.xtns.wdatas.*;
|
||||
public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xop_lnki_logger {
|
||||
private Db_provider provider; private Db_stmt stmt;
|
||||
private Db_conn conn; private Db_stmt stmt;
|
||||
private boolean wdata_enabled = true, xtn_ref_enabled = true, gen_html, gen_hdump;
|
||||
private Xop_log_invoke_wkr invoke_wkr; private Xop_log_property_wkr property_wkr;
|
||||
private int[] ns_ids = Int_.Ary(Xow_ns_.Id_main);// , Xow_ns_.Id_category, Xow_ns_.Id_template
|
||||
@@ -32,19 +32,19 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xop_lnki_log
|
||||
@Override public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.lnki_temp";
|
||||
@Override public byte Init_redirect() {return Bool_.N_byte;}
|
||||
@Override public int[] Init_ns_ary() {return ns_ids;}
|
||||
@Override protected void Init_reset(Db_provider p) {
|
||||
@Override protected void Init_reset(Db_conn p) {
|
||||
p.Exec_sql("DELETE FROM " + Xodb_xowa_cfg_tbl.Tbl_name);
|
||||
p.Exec_sql("DELETE FROM " + Xob_lnki_temp_tbl.Tbl_name);
|
||||
invoke_wkr.Init_reset();
|
||||
property_wkr.Init_reset();
|
||||
}
|
||||
@Override protected Db_provider Init_db_file() {
|
||||
@Override protected Db_conn Init_db_file() {
|
||||
ctx.Lnki().File_wkr_(this);
|
||||
Xodb_db_file make_db_file = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir());
|
||||
provider = make_db_file.Provider();
|
||||
Xob_lnki_temp_tbl.Create_table(provider);
|
||||
stmt = Xob_lnki_temp_tbl.Insert_stmt(provider);
|
||||
return provider;
|
||||
conn = make_db_file.Conn();
|
||||
Xob_lnki_temp_tbl.Create_table(conn);
|
||||
stmt = Xob_lnki_temp_tbl.Insert_stmt(conn);
|
||||
return conn;
|
||||
}
|
||||
@Override protected void Cmd_bgn_end() {
|
||||
wiki_ns_file_is_case_match_all = Wiki_ns_for_file_is_case_match_all(wiki); // NOTE: must call after wiki.init
|
||||
@@ -69,10 +69,10 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xop_lnki_log
|
||||
trg_mnt_mgr.Insert_to_mnt_(Fsdb_mnt_mgr.Mnt_idx_main);
|
||||
Fsdb_mnt_mgr.Patch(trg_mnt_mgr); // NOTE: see fsdb_make; DATE:2014-04-26
|
||||
if (gen_hdump) {
|
||||
hdump_bldr = new Xob_hdump_bldr(wiki.Db_mgr_as_sql(), provider, hdump_max);
|
||||
hdump_bldr = new Xob_hdump_bldr(wiki.Db_mgr_as_sql(), conn, hdump_max);
|
||||
hdump_bldr.Bld_init();
|
||||
}
|
||||
provider.Txn_mgr().Txn_bgn_if_none();
|
||||
conn.Txn_mgr().Txn_bgn_if_none();
|
||||
log_mgr.Txn_bgn();
|
||||
}
|
||||
@Override public void Exec_pg_itm_hook(Xow_ns ns, Xodb_page db_page, byte[] page_src) {
|
||||
@@ -101,13 +101,13 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xop_lnki_log
|
||||
}
|
||||
}
|
||||
@Override public void Exec_commit_hook() {
|
||||
provider.Txn_mgr().Txn_end_all_bgn_if_none(); // save lnki_temp
|
||||
conn.Txn_mgr().Txn_end_all_bgn_if_none(); // save lnki_temp
|
||||
if (gen_hdump) hdump_bldr.Commit();
|
||||
}
|
||||
@Override public void Exec_end_hook() {
|
||||
if (gen_hdump) hdump_bldr.Bld_term();
|
||||
wiki.App().Log_mgr().Txn_end();
|
||||
provider.Txn_mgr().Txn_end();
|
||||
conn.Txn_mgr().Txn_end();
|
||||
}
|
||||
public void Wkr_exec(Xop_ctx ctx, byte[] src, Xop_lnki_tkn lnki, byte lnki_src_tid) {
|
||||
if (lnki.Ttl().ForceLiteralLink()) return; // ignore literal links which creat a link to file, but do not show the image; EX: [[:File:A.png|thumb|120px]] creates a link to File:A.png, regardless of other display-oriented args
|
||||
@@ -121,7 +121,7 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xop_lnki_log
|
||||
usr_dlg.Warn_many("", "", "page and thumbtime both set; this may be an issue with fsdb: page=~{0} ttl=~{1}", ctx.Cur_page().Ttl().Page_db_as_str(), String_.new_utf8_(ttl));
|
||||
if (lnki.Ns_id() == Xow_ns_.Id_media)
|
||||
lnki_src_tid = Xob_lnki_src_tid.Tid_media;
|
||||
Xob_lnki_temp_tbl.Insert(stmt, ctx.Cur_page().Revision_data().Id(), ttl, ttl_commons, Byte_.int_(ext.Id()), lnki.Lnki_type(), lnki_src_tid, lnki.Lnki_w(), lnki.Lnki_h(), lnki.Upright(), lnki_thumbtime, lnki_page);
|
||||
Xob_lnki_temp_tbl.Insert(stmt, ctx.Cur_page().Revision_data().Id(), ttl, ttl_commons, Byte_.By_int(ext.Id()), lnki.Lnki_type(), lnki_src_tid, lnki.Lnki_w(), lnki.Lnki_h(), lnki.Upright(), lnki_thumbtime, lnki_page);
|
||||
}
|
||||
@Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_wdata_enabled_)) wdata_enabled = m.ReadYn("v");
|
||||
|
||||
@@ -24,14 +24,14 @@ public class Xob_orig_qry_cmd extends Xob_itm_basic_base implements Xob_cmd {
|
||||
public void Cmd_ini(Xob_bldr bldr) {}
|
||||
public void Cmd_bgn(Xob_bldr bldr) {
|
||||
// Xof_qry_mgr qry_mgr = new Xof_qry_mgr();
|
||||
Db_provider provider = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Provider();
|
||||
Db_conn conn = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
|
||||
Xob_bmk_mgr bmk = new Xob_bmk_mgr();
|
||||
bmk.Init(provider, this.Cmd_key(), true, false, true);
|
||||
bmk.Init(conn, this.Cmd_key(), true, false, true);
|
||||
bmk.Load();
|
||||
Xof_fsdb_itm itm = new Xof_fsdb_itm();
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
try {
|
||||
// rdr = Select(provider, bmk.Repo_prv(), bmk.Ttl_prv());
|
||||
// rdr = Select(conn, bmk.Repo_prv(), bmk.Ttl_prv());
|
||||
while (rdr.MoveNextPeer()) {
|
||||
Load_itm(itm, rdr);
|
||||
// QueryItm
|
||||
@@ -51,7 +51,7 @@ public class Xob_orig_qry_cmd extends Xob_itm_basic_base implements Xob_cmd {
|
||||
private void Load_itm(Xof_fsdb_itm itm, DataRdr rdr) {
|
||||
itm.Lnki_ttl_(null);
|
||||
}
|
||||
public DataRdr Select(Db_provider p, byte prv_repo_id, byte[] prv_ttl) {
|
||||
public DataRdr Select(Db_conn p, byte prv_repo_id, byte[] prv_ttl) {
|
||||
String sql = String_.Concat_lines_nl_skip_last
|
||||
( "SELECT lnki_ttl"
|
||||
, "FROM orig_regy"
|
||||
|
||||
@@ -23,8 +23,8 @@ public class Xob_orig_regy_cmd extends Xob_itm_basic_base implements Xob_cmd {
|
||||
public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.orig_regy";
|
||||
public void Cmd_ini(Xob_bldr bldr) {}
|
||||
public void Cmd_bgn(Xob_bldr bldr) {
|
||||
Db_provider provider = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Provider();
|
||||
Xob_orig_regy_tbl.Create_table(provider);
|
||||
Db_conn conn = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
|
||||
Xob_orig_regy_tbl.Create_table(conn);
|
||||
Xow_wiki commons_wiki = bldr.App().Wiki_mgr().Get_by_key_or_make(Xow_wiki_.Domain_commons_bry).Init_assert();
|
||||
Xow_wiki repo_0 = wiki, repo_1 = commons_wiki;
|
||||
if (repo_0_is_remote) { // NOTE: default is false; local_wiki will be preferred over commons_wiki
|
||||
@@ -33,7 +33,7 @@ public class Xob_orig_regy_cmd extends Xob_itm_basic_base implements Xob_cmd {
|
||||
}
|
||||
repo_0.Init_assert(); repo_1.Init_assert();
|
||||
Xodb_db_file file_registry_db = Xodb_db_file.init__page_regy(commons_wiki.Fsys_mgr().Root_dir());
|
||||
Xob_orig_regy_tbl.Create_data(bldr.Usr_dlg(), provider, file_registry_db, repo_0_is_remote, repo_0, repo_1, Xob_lnki_temp_wkr.Wiki_ns_for_file_is_case_match_all(wiki));
|
||||
Xob_orig_regy_tbl.Create_data(bldr.Usr_dlg(), conn, file_registry_db, repo_0_is_remote, repo_0, repo_1, Xob_lnki_temp_wkr.Wiki_ns_for_file_is_case_match_all(wiki));
|
||||
}
|
||||
public void Cmd_run() {}
|
||||
public void Cmd_end() {}
|
||||
|
||||
@@ -18,8 +18,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
|
||||
import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.bldrs.oimgs.*;
|
||||
class Xob_orig_regy_tbl {
|
||||
public static void Create_table(Db_provider p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql);}
|
||||
public static void Create_data(Gfo_usr_dlg usr_dlg, Db_provider p, Xodb_db_file file_registry_db, boolean repo_0_is_remote, Xow_wiki repo_0_wiki, Xow_wiki repo_1_wiki, boolean wiki_ns_for_file_is_case_match_all) {
|
||||
public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql);}
|
||||
public static void Create_data(Gfo_usr_dlg usr_dlg, Db_conn p, Xodb_db_file file_registry_db, boolean repo_0_is_remote, Xow_wiki repo_0_wiki, Xow_wiki repo_1_wiki, boolean wiki_ns_for_file_is_case_match_all) {
|
||||
usr_dlg.Prog_many("", "", "inserting lnki_regy");
|
||||
p.Exec_sql(Sql_create_data);
|
||||
Sqlite_engine_.Idx_create(usr_dlg, p, "orig_regy", Idx_ttl_local);
|
||||
@@ -37,9 +37,9 @@ class Xob_orig_regy_tbl {
|
||||
repo_1_tid = Xof_repo_itm.Repo_local;
|
||||
local_wiki = repo_1_wiki;
|
||||
}
|
||||
Create_data_for_repo(usr_dlg, p, local_wiki, Byte_.int_(repo_0_tid), repo_0_dir.GenSubFil(Xodb_db_file.Name__wiki_image));
|
||||
Create_data_for_repo(usr_dlg, p, local_wiki, Byte_.By_int(repo_0_tid), repo_0_dir.GenSubFil(Xodb_db_file.Name__wiki_image));
|
||||
if (!local_is_remote) { // only run for repo_1 if local != remote; only affects commons
|
||||
Create_data_for_repo(usr_dlg, p, local_wiki, Byte_.int_(repo_1_tid), repo_1_dir.GenSubFil(Xodb_db_file.Name__wiki_image));
|
||||
Create_data_for_repo(usr_dlg, p, local_wiki, Byte_.By_int(repo_1_tid), repo_1_dir.GenSubFil(Xodb_db_file.Name__wiki_image));
|
||||
if (wiki_ns_for_file_is_case_match_all) {
|
||||
Io_url repo_remote_dir = repo_0_is_remote ? repo_0_dir : repo_1_dir;
|
||||
Create_data_for_cs(usr_dlg, p, local_wiki, repo_remote_dir);
|
||||
@@ -48,7 +48,7 @@ class Xob_orig_regy_tbl {
|
||||
Sqlite_engine_.Db_detach(p, "page_db");
|
||||
Sqlite_engine_.Idx_create(usr_dlg, p, "orig_regy", Idx_xfer_temp);
|
||||
}
|
||||
private static void Create_data_for_repo(Gfo_usr_dlg usr_dlg, Db_provider cur, Xow_wiki local_wiki, byte repo_tid, Io_url join) {
|
||||
private static void Create_data_for_repo(Gfo_usr_dlg usr_dlg, Db_conn cur, Xow_wiki local_wiki, byte repo_tid, Io_url join) {
|
||||
usr_dlg.Note_many("", "", "inserting page for xowa.wiki.image: ~{0}", join.OwnerDir().NameOnly());
|
||||
boolean wiki_has_cs_file = repo_tid == Xof_repo_itm.Repo_remote && local_wiki.Ns_mgr().Ns_file().Case_match() == Xow_ns_case_.Id_all;
|
||||
String lnki_ttl_fld = wiki_has_cs_file ? "Coalesce(o.lnki_commons_ttl, o.lnki_ttl)" : "o.lnki_ttl"; // NOTE: use lnki_commons_ttl if [[File]] is cs PAGE:en.d:water EX:[[image:wikiquote-logo.png|50px|none|alt=]]; DATE:2014-09-05
|
||||
@@ -59,7 +59,7 @@ class Xob_orig_regy_tbl {
|
||||
cur.Exec_sql(String_.Format(Sql_update_repo_redirect, repo_tid, lnki_ttl_fld));
|
||||
Sqlite_engine_.Db_detach(cur, "image_db");
|
||||
}
|
||||
private static void Create_data_for_cs(Gfo_usr_dlg usr_dlg, Db_provider p, Xow_wiki local_wiki, Io_url repo_remote_dir) {
|
||||
private static void Create_data_for_cs(Gfo_usr_dlg usr_dlg, Db_conn p, Xow_wiki local_wiki, Io_url repo_remote_dir) {
|
||||
p.Exec_sql(Xob_orig_regy_tbl.Sql_cs_mark_dupes); // orig_regy: find dupes; see note in SQL
|
||||
p.Exec_sql(Xob_orig_regy_tbl.Sql_cs_update_ttls); // orig_regy: update lnki_ttl with lnki_commons_ttl
|
||||
Create_data_for_repo(usr_dlg, p, local_wiki, Xof_repo_itm.Repo_remote, repo_remote_dir.GenSubFil(Xodb_db_file.Name__wiki_image));
|
||||
|
||||
@@ -24,7 +24,7 @@ public class Xob_page_regy_cmd extends Xob_itm_basic_base implements Xob_cmd {
|
||||
public void Cmd_ini(Xob_bldr bldr) {}
|
||||
public void Cmd_bgn(Xob_bldr bldr) {
|
||||
Xow_wiki commons_wiki = bldr.App().Wiki_mgr().Get_by_key_or_make(Xow_wiki_.Domain_commons_bry).Init_assert();
|
||||
Db_provider page_regy_provider = Xodb_db_file.init__page_regy(commons_wiki.Fsys_mgr().Root_dir()).Provider();
|
||||
Db_conn page_regy_provider = Xodb_db_file.init__page_regy(commons_wiki.Fsys_mgr().Root_dir()).Conn();
|
||||
commons_wiki.Init_assert();
|
||||
if (build_commons) {
|
||||
Xob_page_regy_tbl.Reset_table(page_regy_provider);
|
||||
|
||||
@@ -18,21 +18,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
|
||||
import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.bldrs.oimgs.*;
|
||||
class Xob_page_regy_tbl {
|
||||
public static void Reset_table(Db_provider p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql);}
|
||||
public static void Create_data(Gfo_usr_dlg usr_dlg, Db_provider p, byte repo_tid, Xow_wiki wiki) {
|
||||
public static void Reset_table(Db_conn p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql);}
|
||||
public static void Create_data(Gfo_usr_dlg usr_dlg, Db_conn p, byte repo_tid, Xow_wiki wiki) {
|
||||
Create_data__insert_page(usr_dlg, p, repo_tid, wiki.Db_mgr_as_sql().Fsys_mgr().Get_url(Xodb_file_tid.Tid_core));
|
||||
Create_data__insert_redirect(usr_dlg, p, repo_tid, wiki.Fsys_mgr().Root_dir().GenSubFil(Xodb_db_file.Name__wiki_redirect));
|
||||
}
|
||||
public static void Delete_local(Db_provider p) {
|
||||
public static void Delete_local(Db_conn p) {
|
||||
p.Exec_sql("DELETE FROM page_regy WHERE repo_id = " + Xof_repo_itm.Repo_local);
|
||||
}
|
||||
private static void Create_data__insert_page(Gfo_usr_dlg usr_dlg, Db_provider cur, byte repo_tid, Io_url join) {
|
||||
private static void Create_data__insert_page(Gfo_usr_dlg usr_dlg, Db_conn cur, byte repo_tid, Io_url join) {
|
||||
usr_dlg.Note_many("", "", "inserting page: ~{0}", join.NameOnly());
|
||||
Sqlite_engine_.Db_attach(cur, "page_db", join.Raw());
|
||||
cur.Exec_sql(String_.Format(Sql_create_page, repo_tid));
|
||||
Sqlite_engine_.Db_detach(cur, "page_db");
|
||||
}
|
||||
private static void Create_data__insert_redirect(Gfo_usr_dlg usr_dlg, Db_provider cur, byte repo_tid, Io_url join) {
|
||||
private static void Create_data__insert_redirect(Gfo_usr_dlg usr_dlg, Db_conn cur, byte repo_tid, Io_url join) {
|
||||
usr_dlg.Note_many("", "", "inserting redirect: ~{0}", join.OwnerDir().NameOnly());
|
||||
Sqlite_engine_.Db_attach(cur, "redirect_db", join.Raw());
|
||||
cur.Exec_sql(String_.Format(Sql_create_redirect, repo_tid));
|
||||
|
||||
@@ -23,12 +23,12 @@ public class Xob_xfer_regy_cmd extends Xob_itm_basic_base implements Xob_cmd {
|
||||
public void Cmd_ini(Xob_bldr bldr) {}
|
||||
public void Cmd_bgn(Xob_bldr bldr) {}
|
||||
public void Cmd_run() {
|
||||
Db_provider provider = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Provider();
|
||||
Xob_xfer_regy_tbl.Create_table(provider);
|
||||
Xob_xfer_regy_tbl.Create_data(usr_dlg, provider);
|
||||
Xob_xfer_regy_tbl.Create_index(usr_dlg, provider);
|
||||
Xob_xfer_regy_log_tbl.Create_table(provider);
|
||||
provider.Txn_mgr().Txn_end_all();
|
||||
Db_conn conn = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
|
||||
Xob_xfer_regy_tbl.Create_table(conn);
|
||||
Xob_xfer_regy_tbl.Create_data(usr_dlg, conn);
|
||||
Xob_xfer_regy_tbl.Create_index(usr_dlg, conn);
|
||||
Xob_xfer_regy_log_tbl.Create_table(conn);
|
||||
conn.Txn_mgr().Txn_end_all();
|
||||
}
|
||||
public void Cmd_end() {}
|
||||
public void Cmd_print() {}
|
||||
|
||||
@@ -18,13 +18,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
|
||||
import gplx.dbs.*; import gplx.xowa.bldrs.oimgs.*;
|
||||
public class Xob_xfer_regy_tbl {
|
||||
public static void Create_table(Db_provider p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql);}
|
||||
public static void Create_data(Gfo_usr_dlg usr_dlg, Db_provider p) {
|
||||
public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql);}
|
||||
public static void Create_data(Gfo_usr_dlg usr_dlg, Db_conn p) {
|
||||
p.Exec_sql(Sql_create_data_orig);
|
||||
p.Exec_sql(Sql_create_data_thumb);
|
||||
}
|
||||
public static void Create_index(Gfo_usr_dlg usr_dlg, Db_provider p) {Sqlite_engine_.Idx_create(usr_dlg, p, Xodb_db_file.Name__file_make, Idx_lnki_page_id, Idx_lnki_ttl);}
|
||||
public static DataRdr Select(Db_provider p, byte repo_id, byte[] ttl, int limit) {
|
||||
public static void Create_index(Gfo_usr_dlg usr_dlg, Db_conn p) {Sqlite_engine_.Idx_create(usr_dlg, p, Xodb_db_file.Name__file_make, Idx_lnki_page_id, Idx_lnki_ttl);}
|
||||
public static DataRdr Select(Db_conn p, byte repo_id, byte[] ttl, int limit) {
|
||||
Db_qry qry = Db_qry_.select_().Cols_all_()
|
||||
.From_(Tbl_name)
|
||||
.Where_(gplx.criterias.Criteria_.And_many(Db_crt_.mte_(Fld_orig_repo, repo_id), Db_crt_.mt_(Fld_lnki_ttl, String_.new_utf8_(ttl)), Db_crt_.eq_(Fld_xfer_status, 0)))
|
||||
@@ -33,8 +33,8 @@ public class Xob_xfer_regy_tbl {
|
||||
;
|
||||
return p.Exec_qry_as_rdr(qry);
|
||||
}
|
||||
public static Db_stmt Select_by_page_id_stmt(Db_provider p) {return p.Prepare(Db_qry_sql.rdr_(Sql_select));}
|
||||
public static DataRdr Select_by_page_id(Db_stmt stmt, int page_id, int limit) {return stmt.Val_int_(page_id).Val_int_(limit).Exec_select();}
|
||||
public static Db_stmt Select_by_page_id_stmt(Db_conn p) {return p.New_stmt(Db_qry_sql.rdr_(Sql_select));}
|
||||
public static DataRdr Select_by_page_id(Db_stmt stmt, int page_id, int limit) {return stmt.Val_int(page_id).Val_int(limit).Exec_select();}
|
||||
private static final String
|
||||
Sql_select = String_.Concat_lines_nl
|
||||
( "SELECT *"
|
||||
@@ -50,7 +50,7 @@ public class Xob_xfer_regy_tbl {
|
||||
, "WHERE xfer_status = 0"
|
||||
)
|
||||
;
|
||||
public static DataRdr Select_by_lnki_page_id(Db_provider p, int lnki_page_id, int select_interval) {
|
||||
public static DataRdr Select_by_lnki_page_id(Db_conn p, int lnki_page_id, int select_interval) {
|
||||
Db_qry qry = Db_qry_.select_().Cols_all_()
|
||||
.From_(Tbl_name)
|
||||
.Where_(gplx.criterias.Criteria_.And_many(Db_crt_.eq_(Fld_xfer_status, 0), Db_crt_.mte_(Fld_lnki_page_id, lnki_page_id)))
|
||||
@@ -59,7 +59,7 @@ public class Xob_xfer_regy_tbl {
|
||||
;
|
||||
return p.Exec_qry_as_rdr(qry);
|
||||
}
|
||||
public static int Select_total_pending(Db_provider p) {
|
||||
public static int Select_total_pending(Db_conn p) {
|
||||
DataRdr rdr = p.Exec_sql_as_rdr(Sql_select_total_pending);
|
||||
int rv = 0;
|
||||
if (rdr.MoveNextPeer())
|
||||
@@ -132,14 +132,14 @@ public class Xob_xfer_regy_tbl {
|
||||
public static byte Status_todo = 0, Status_pass = 1, Status_fail = 2, Status_ignore_processed = 3;
|
||||
}
|
||||
class Xob_xfer_regy_log_tbl {
|
||||
public static void Create_table(Db_provider p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql);}
|
||||
public static Db_stmt Insert_stmt(Db_provider p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_lnki_id, Fld_xfer_status, Fld_xfer_bin_tid, Fld_xfer_bin_msg);}
|
||||
public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql);}
|
||||
public static Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_lnki_id, Fld_xfer_status, Fld_xfer_bin_tid, Fld_xfer_bin_msg);}
|
||||
public static void Insert(Db_stmt stmt, byte status, int id, byte wkr_tid, String wkr_msg) {
|
||||
stmt.Clear()
|
||||
.Val_int_(id)
|
||||
.Val_byte_(status)
|
||||
.Val_byte_(wkr_tid)
|
||||
.Val_str_(wkr_msg)
|
||||
.Val_int(id)
|
||||
.Val_byte(status)
|
||||
.Val_byte(wkr_tid)
|
||||
.Val_str(wkr_msg)
|
||||
.Exec_insert();
|
||||
}
|
||||
private static final String Tbl_sql = String_.Concat_lines_nl
|
||||
|
||||
@@ -26,11 +26,11 @@ public class Xob_xfer_regy_update_cmd extends Xob_itm_basic_base implements Xob_
|
||||
public void Cmd_end() {}
|
||||
public void Cmd_print() {}
|
||||
private void Exec_main() {
|
||||
Db_provider make_db_provider = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Provider();
|
||||
Db_conn make_db_provider = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
|
||||
this.Copy_atrs_to_make_db(make_db_provider);
|
||||
this.Update_status(make_db_provider);
|
||||
}
|
||||
private void Copy_atrs_to_make_db(Db_provider make_db_provider) {
|
||||
private void Copy_atrs_to_make_db(Db_conn make_db_provider) {
|
||||
wiki.File_mgr().Fsdb_mgr().Init_by_wiki(wiki);
|
||||
Fsdb_db_abc_mgr fsdb_abc_mgr = wiki.File_mgr().Fsdb_mgr().Mnt_mgr().Abc_mgr_at(0); // 0 = fsdb.main
|
||||
Io_url fsdb_atr_url = fsdb_abc_mgr.Atr_mgr().Get_at(0).Url(); // 0 = fsdb.atr.00
|
||||
@@ -47,7 +47,7 @@ public class Xob_xfer_regy_update_cmd extends Xob_itm_basic_base implements Xob_
|
||||
Sqlite_engine_.Idx_create(make_db_provider, Xob_fsdb_regy_tbl.Idx_main);
|
||||
Sqlite_engine_.Db_detach(make_db_provider, "fsdb_db");
|
||||
}
|
||||
private void Update_status(Db_provider make_db_provider) {
|
||||
private void Update_status(Db_conn make_db_provider) {
|
||||
make_db_provider.Txn_mgr().Txn_bgn();
|
||||
make_db_provider.Exec_sql(Xob_fsdb_regy_tbl.Update_regy_fil);
|
||||
make_db_provider.Exec_sql(Xob_fsdb_regy_tbl.Update_regy_thm);
|
||||
|
||||
@@ -23,11 +23,11 @@ public class Xob_xfer_temp_cmd_orig extends Xob_itm_basic_base implements Xob_cm
|
||||
public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.xfer_temp.orig";
|
||||
public void Cmd_ini(Xob_bldr bldr) {}
|
||||
public void Cmd_bgn(Xob_bldr bldr) {
|
||||
Db_provider provider = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Provider();
|
||||
Xob_xfer_temp_tbl.Create_table(provider);
|
||||
Db_stmt trg_stmt = Xob_xfer_temp_tbl.Insert_stmt(provider);
|
||||
provider.Txn_mgr().Txn_bgn_if_none();
|
||||
DataRdr rdr = provider.Exec_sql_as_rdr(Sql_select);
|
||||
Db_conn conn = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
|
||||
Xob_xfer_temp_tbl.Create_table(conn);
|
||||
Db_stmt trg_stmt = Xob_xfer_temp_tbl.Insert_stmt(conn);
|
||||
conn.Txn_mgr().Txn_bgn_if_none();
|
||||
DataRdr rdr = conn.Exec_sql_as_rdr(Sql_select);
|
||||
long[] ext_maxs = Calc_ext_max();
|
||||
while (rdr.MoveNextPeer()) {
|
||||
int lnki_ext = rdr.ReadByte(Xob_lnki_regy_tbl.Fld_lnki_ext);
|
||||
@@ -55,7 +55,7 @@ public class Xob_xfer_temp_cmd_orig extends Xob_itm_basic_base implements Xob_cm
|
||||
, Xof_doc_page.Null
|
||||
, 0);
|
||||
}
|
||||
provider.Txn_mgr().Txn_end_all();
|
||||
conn.Txn_mgr().Txn_end_all();
|
||||
}
|
||||
private long[] Calc_ext_max() {
|
||||
Xoft_rule_grp ext_rules = wiki.App().File_mgr().Ext_rules().Get_or_new(ext_rules_key);
|
||||
|
||||
@@ -22,11 +22,11 @@ public class Xob_xfer_temp_cmd_thumb extends Xob_itm_basic_base implements Xob_c
|
||||
public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.xfer_temp.thumb";
|
||||
public void Cmd_ini(Xob_bldr bldr) {}
|
||||
public void Cmd_bgn(Xob_bldr bldr) {
|
||||
Db_provider provider = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Provider();
|
||||
Xob_xfer_temp_tbl.Create_table(provider);
|
||||
Db_stmt trg_stmt = Xob_xfer_temp_tbl.Insert_stmt(provider);
|
||||
provider.Txn_mgr().Txn_bgn_if_none();
|
||||
DataRdr rdr = provider.Exec_sql_as_rdr(Sql_select);
|
||||
Db_conn conn = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
|
||||
Xob_xfer_temp_tbl.Create_table(conn);
|
||||
Db_stmt trg_stmt = Xob_xfer_temp_tbl.Insert_stmt(conn);
|
||||
conn.Txn_mgr().Txn_bgn_if_none();
|
||||
DataRdr rdr = conn.Exec_sql_as_rdr(Sql_select);
|
||||
Xob_xfer_temp_itm temp_itm = new Xob_xfer_temp_itm();
|
||||
Xof_img_size img_size = new Xof_img_size();
|
||||
while (rdr.MoveNextPeer()) {
|
||||
@@ -35,7 +35,7 @@ public class Xob_xfer_temp_cmd_thumb extends Xob_itm_basic_base implements Xob_c
|
||||
if (temp_itm.Chk(img_size))
|
||||
temp_itm.Insert(trg_stmt, img_size);
|
||||
}
|
||||
provider.Txn_mgr().Txn_end_all();
|
||||
conn.Txn_mgr().Txn_end_all();
|
||||
}
|
||||
public void Cmd_run() {}
|
||||
public void Cmd_end() {}
|
||||
|
||||
@@ -41,7 +41,7 @@ class Xob_xfer_temp_itm {
|
||||
public int Lnki_page() {return lnki_page;} private int lnki_page;
|
||||
public void Clear() {
|
||||
lnki_ext = lnki_type = lnki_src_tid
|
||||
= orig_repo = orig_media_type_tid = Byte_.MaxValue_127;
|
||||
= orig_repo = orig_media_type_tid = Byte_.Max_value_127;
|
||||
chk_tid = Chk_tid_none;
|
||||
lnki_id = lnki_w = lnki_h = lnki_count = lnki_page_id
|
||||
= orig_w = orig_h = orig_page_id = Int_.Neg1;
|
||||
|
||||
@@ -18,29 +18,29 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
|
||||
import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.files.*;
|
||||
class Xob_xfer_temp_tbl {
|
||||
public static void Create_table(Db_provider p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql);}
|
||||
public static Db_stmt Insert_stmt(Db_provider p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_lnki_id, Fld_lnki_page_id, Fld_orig_repo, Fld_orig_page_id, Fld_lnki_ttl, Fld_orig_redirect_src, Fld_lnki_ext, Fld_lnki_type, Fld_orig_media_type, Fld_file_is_orig, Fld_orig_w, Fld_orig_h, Fld_file_w, Fld_file_h, Fld_html_w, Fld_html_h, Fld_lnki_time, Fld_lnki_page, Fld_lnki_count);}
|
||||
public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql);}
|
||||
public static Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_lnki_id, Fld_lnki_page_id, Fld_orig_repo, Fld_orig_page_id, Fld_lnki_ttl, Fld_orig_redirect_src, Fld_lnki_ext, Fld_lnki_type, Fld_orig_media_type, Fld_file_is_orig, Fld_orig_w, Fld_orig_h, Fld_file_w, Fld_file_h, Fld_html_w, Fld_html_h, Fld_lnki_time, Fld_lnki_page, Fld_lnki_count);}
|
||||
public static void Insert(Db_stmt stmt, int lnki_id, int lnki_page_id, byte repo_id, int page_id, String ttl, String redirect_src, int ext_id, byte lnki_type, String orig_media_type, boolean file_is_orig, int orig_w, int orig_h, int html_w, int html_h, int file_w, int file_h, double thumbtime, int page, int count) {
|
||||
stmt.Clear()
|
||||
.Val_int_(lnki_id)
|
||||
.Val_int_(lnki_page_id)
|
||||
.Val_byte_(repo_id)
|
||||
.Val_int_(page_id)
|
||||
.Val_str_(ttl)
|
||||
.Val_str_(redirect_src)
|
||||
.Val_int_(ext_id)
|
||||
.Val_byte_(lnki_type)
|
||||
.Val_str_(orig_media_type)
|
||||
.Val_byte_by_bool_(file_is_orig)
|
||||
.Val_int_(orig_w)
|
||||
.Val_int_(orig_h)
|
||||
.Val_int_(file_w)
|
||||
.Val_int_(file_h)
|
||||
.Val_int_(html_w)
|
||||
.Val_int_(html_h)
|
||||
.Val_double_(Xof_doc_thumb.Db_save_double(thumbtime))
|
||||
.Val_int_(page)
|
||||
.Val_int_(count)
|
||||
.Val_int(lnki_id)
|
||||
.Val_int(lnki_page_id)
|
||||
.Val_byte(repo_id)
|
||||
.Val_int(page_id)
|
||||
.Val_str(ttl)
|
||||
.Val_str(redirect_src)
|
||||
.Val_int(ext_id)
|
||||
.Val_byte(lnki_type)
|
||||
.Val_str(orig_media_type)
|
||||
.Val_bool_as_byte(file_is_orig)
|
||||
.Val_int(orig_w)
|
||||
.Val_int(orig_h)
|
||||
.Val_int(file_w)
|
||||
.Val_int(file_h)
|
||||
.Val_int(html_w)
|
||||
.Val_int(html_h)
|
||||
.Val_double(Xof_doc_thumb.Db_save_double(thumbtime))
|
||||
.Val_int(page)
|
||||
.Val_int(count)
|
||||
.Exec_insert();
|
||||
}
|
||||
public static final String Tbl_name = "xfer_temp"
|
||||
|
||||
@@ -29,7 +29,7 @@ public class Xob_cmd_exec_sql implements Xob_cmd {
|
||||
Xodb_fsys_mgr fsys_mgr = db_mgr.Fsys_mgr();
|
||||
Xodb_file file = fsys_mgr.Get_by_idx(file_idx);
|
||||
app.Usr_dlg().Plog_many("", "", "exec_sql: running sql; file_idx=~{0} sql=~{1}", file_idx, sql);
|
||||
file.Provider().Exec_sql(sql);
|
||||
file.Conn().Exec_sql(sql);
|
||||
}
|
||||
public void Cmd_run() {}
|
||||
public void Cmd_end() {}
|
||||
|
||||
@@ -20,7 +20,7 @@ import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import g
|
||||
public class Xob_page_sql extends Xob_itm_basic_base implements Xobd_wkr, GfoInvkAble {
|
||||
private Db_idx_mode idx_mode = Db_idx_mode.Itm_end;
|
||||
private Io_stream_zip_mgr zip_mgr; private byte data_storage_format; private boolean redirect_id_enabled;
|
||||
private Xodb_mgr_sql db_mgr; private Xodb_fsys_mgr fsys_mgr; private Db_provider page_provider; private Db_stmt page_stmt; private Xob_text_stmts_mgr text_stmts_mgr;
|
||||
private Xodb_mgr_sql db_mgr; private Xodb_fsys_mgr fsys_mgr; private Db_conn page_provider; private Db_stmt page_stmt; private Xob_text_stmts_mgr text_stmts_mgr;
|
||||
private int page_count_all, page_count_main = 0; private int txn_commit_interval = 100000; // 100 k
|
||||
private DateAdp modified_latest = DateAdp_.MinValue;
|
||||
private Xop_redirect_mgr redirect_mgr; private Xob_redirect_tbl redirect_tbl;
|
||||
@@ -38,7 +38,7 @@ public class Xob_page_sql extends Xob_itm_basic_base implements Xobd_wkr, GfoInv
|
||||
db_mgr = wiki.Db_mgr_as_sql();
|
||||
db_mgr.Data_storage_format_(data_storage_format);
|
||||
fsys_mgr = db_mgr.Fsys_mgr();
|
||||
page_provider = fsys_mgr.Provider_page();
|
||||
page_provider = fsys_mgr.Conn_page();
|
||||
page_stmt = db_mgr.Tbl_page().Insert_stmt(page_provider);
|
||||
page_provider.Txn_mgr().Txn_bgn_if_none();
|
||||
text_stmts_mgr = new Xob_text_stmts_mgr(db_mgr, fsys_mgr);
|
||||
@@ -46,7 +46,7 @@ public class Xob_page_sql extends Xob_itm_basic_base implements Xobd_wkr, GfoInv
|
||||
|
||||
if (redirect_id_enabled) {
|
||||
redirect_tbl = new Xob_redirect_tbl(wiki.Fsys_mgr().Root_dir(), app.Encoder_mgr().Url_ttl()).Create_table();
|
||||
redirect_tbl.Provider().Txn_mgr().Txn_bgn_if_none();
|
||||
redirect_tbl.Conn().Txn_mgr().Txn_bgn_if_none();
|
||||
}
|
||||
}
|
||||
public void Wkr_run(Xodb_page page) {
|
||||
@@ -62,22 +62,25 @@ public class Xob_page_sql extends Xob_itm_basic_base implements Xobd_wkr, GfoInv
|
||||
int random_int = ns.Count() + 1;
|
||||
ns.Count_(random_int);
|
||||
text = zip_mgr.Zip(data_storage_format, text);
|
||||
int text_stmt_idx = text_stmts_mgr.Get_by_ns(ns.Bldr_file_idx(), text.length); // NOTE: was text.length, but want text_len which is original page_len, not compressed; DATE:2014-08-04
|
||||
Db_stmt text_stmt = text_stmts_mgr.Get_at(text_stmt_idx);
|
||||
int text_stmt_idx = text_stmts_mgr.Stmt_by_ns(ns.Bldr_file_idx(), text.length); // NOTE: was text.length, but want text_len which is original page_len, not compressed; DATE:2014-08-04
|
||||
Db_stmt text_stmt = text_stmts_mgr.Stmt_at(text_stmt_idx);
|
||||
try {
|
||||
db_mgr.Page_create(page_stmt, text_stmt, page_id, page.Ns_id(), page.Ttl_wo_ns(), redirect, modified, text, random_int, text_stmt_idx);
|
||||
}
|
||||
catch (Exception e) {
|
||||
usr_dlg.Warn_many("", "", "failed to insert page: id=~{0} ns=~{1} title=~{2} error=~{3}", page.Id(), page.Ns_id(), String_.new_utf8_(page.Ttl_wo_ns()), Err_.Message_gplx_brief(e));
|
||||
page_stmt.New(); // must new stmt variable, else java.sql.SQLException: "statement is not executing"
|
||||
text_stmt.New(); // must new stmt variable, else java.sql.SQLException: "statement is not executing"
|
||||
page_stmt.Reset_stmt(); // must new stmt variable, else java.sql.SQLException: "statement is not executing"
|
||||
text_stmt.Reset_stmt(); // must new stmt variable, else java.sql.SQLException: "statement is not executing"
|
||||
}
|
||||
if (redirect && redirect_id_enabled) {
|
||||
redirect_tbl.Insert(page_id, page.Ttl_wo_ns(), redirect_ttl);
|
||||
}
|
||||
++page_count_all;
|
||||
if (ns.Id_main() && !page.Type_redirect()) ++page_count_main;
|
||||
if (page_count_all % txn_commit_interval == 0) text_stmt.Provider().Txn_mgr().Txn_end_all_bgn_if_none();
|
||||
if (page_count_all % txn_commit_interval == 0) {
|
||||
Db_conn conn = text_stmts_mgr.Conn_at(text_stmt_idx);
|
||||
conn.Txn_mgr().Txn_end_all_bgn_if_none();
|
||||
}
|
||||
}
|
||||
public void Wkr_end() {
|
||||
usr_dlg.Log_many("", "", "import.page: insert done; committing pages; pages=~{0}", page_count_all);
|
||||
@@ -92,7 +95,7 @@ public class Xob_page_sql extends Xob_itm_basic_base implements Xobd_wkr, GfoInv
|
||||
db_mgr.Tbl_xowa_cfg().Insert_str(Xodb_mgr_sql.Grp_wiki_init, "props.modified_latest", modified_latest.XtoStr_fmt(DateAdp_.Fmt_iso8561_date_time));
|
||||
if (idx_mode.Tid_is_end()) Idx_create();
|
||||
if (redirect_id_enabled) {
|
||||
redirect_tbl.Provider().Txn_mgr().Txn_end_all();
|
||||
redirect_tbl.Conn().Txn_mgr().Txn_end_all();
|
||||
Xodb_file core_file = fsys_mgr.Get_tid_root(Xodb_file_tid.Tid_core);
|
||||
redirect_tbl.Update_trg_redirect_id(core_file.Url(), 1);
|
||||
redirect_tbl.Update_src_redirect_id(core_file.Url(), page_provider);
|
||||
@@ -118,8 +121,9 @@ public class Xob_page_sql extends Xob_itm_basic_base implements Xobd_wkr, GfoInv
|
||||
}
|
||||
class Xob_text_stmts_mgr {
|
||||
public Xob_text_stmts_mgr(Xodb_mgr_sql db_mgr, Xodb_fsys_mgr fsys_mgr) {this.db_mgr = db_mgr; this.fsys_mgr = fsys_mgr;} private Xodb_mgr_sql db_mgr; Xodb_fsys_mgr fsys_mgr;
|
||||
public Db_stmt Get_at(int i) {return text_stmts[i];}
|
||||
public int Get_by_ns(int ns_file_idx, int text_len) {
|
||||
public Db_stmt Stmt_at(int i) {return text_stmts[i];}
|
||||
public Db_conn Conn_at(int i) {return text_providers[i];}
|
||||
public int Stmt_by_ns(int ns_file_idx, int text_len) {
|
||||
Xodb_file file = File_get(ns_file_idx, text_len);
|
||||
int stmt_idx = file.Id();
|
||||
Db_stmt stmt = null;
|
||||
@@ -127,16 +131,18 @@ class Xob_text_stmts_mgr {
|
||||
stmt = text_stmts[stmt_idx];
|
||||
if (stmt != null) return stmt_idx;
|
||||
}
|
||||
stmt = db_mgr.Tbl_text().Insert_stmt(file.Provider());
|
||||
file.Provider().Txn_mgr().Txn_bgn_if_none(); // automatically start txn
|
||||
Add(stmt, stmt_idx);
|
||||
Db_conn conn = file.Conn();
|
||||
stmt = db_mgr.Tbl_text().Insert_stmt(conn);
|
||||
conn.Txn_mgr().Txn_bgn_if_none(); // automatically start txn
|
||||
Add(conn, stmt, stmt_idx);
|
||||
return stmt_idx;
|
||||
}
|
||||
public void Rls() {
|
||||
for (int i = 0; i < text_stmts_len; i++) {
|
||||
Db_stmt stmt = text_stmts[i];
|
||||
if (stmt != null) {
|
||||
stmt.Provider().Txn_mgr().Txn_end_all();
|
||||
Db_conn conn = text_providers[i];
|
||||
conn.Txn_mgr().Txn_end_all();
|
||||
stmt.Rls();
|
||||
}
|
||||
text_stmts[i] = null;
|
||||
@@ -150,7 +156,7 @@ class Xob_text_stmts_mgr {
|
||||
long file_len = file.File_len();
|
||||
long file_max = fsys_mgr.Tid_text_max();
|
||||
if (file_max != Xodb_fsys_mgr.Heap_max_infinite && (file_len + text_len > file_max)) { // file is "full"
|
||||
file.Provider().Txn_mgr().Txn_end_all(); // close txn
|
||||
file.Conn().Txn_mgr().Txn_end_all(); // close txn
|
||||
file = fsys_mgr.Make(Xodb_file_tid.Tid_text);
|
||||
file_idx = file.Id();
|
||||
fsys_mgr.Tid_text_idx_(file_idx);
|
||||
@@ -161,15 +167,20 @@ class Xob_text_stmts_mgr {
|
||||
else
|
||||
return fsys_mgr.Get_or_make(Xodb_file_tid.Tid_text, file_idx);
|
||||
}
|
||||
private void Add(Db_stmt stmt, int stmt_idx) {
|
||||
private void Add(Db_conn conn, Db_stmt stmt, int stmt_idx) {
|
||||
int new_len = stmt_idx + 1;
|
||||
if (new_len > text_stmts_max) { // ary too small >>> expand
|
||||
text_stmts_max = new_len * 2;
|
||||
Db_stmt[] text_stmts_subs = new Db_stmt[text_stmts_max];
|
||||
Array_.CopyTo(text_stmts, 0, text_stmts_subs, 0, text_stmts_len);
|
||||
text_stmts = text_stmts_subs;
|
||||
|
||||
Db_conn[] new_providers = new Db_conn[text_stmts_max];
|
||||
Array_.CopyTo(text_providers, 0, new_providers, 0, text_stmts_len);
|
||||
text_providers = new_providers;
|
||||
}
|
||||
text_stmts[stmt_idx] = stmt;
|
||||
text_providers[stmt_idx] = conn;
|
||||
text_stmts_len = new_len;
|
||||
} private Db_stmt[] text_stmts = new Db_stmt[0]; int text_stmts_len, text_stmts_max = 0;
|
||||
} private Db_stmt[] text_stmts = new Db_stmt[0]; int text_stmts_len, text_stmts_max = 0; private Db_conn[] text_providers = new Db_conn[0];
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ public abstract class Xob_search_base extends Xob_itm_dump_base implements Xobd_
|
||||
if (delete_temp) Io_mgr._.DeleteDirDeep(temp_dir);
|
||||
if (wiki.Db_mgr().Tid() == Xodb_mgr_sql.Tid_sql) {
|
||||
Xodb_fsys_mgr db_fs = wiki.Db_mgr_as_sql().Fsys_mgr();
|
||||
wiki.Db_mgr_as_sql().Tbl_xowa_db().Commit_all(db_fs.Provider_core(), db_fs.Files_ary()); // always save files now; need to commit created search_db_idx to xowa_db, else will be reused by ctg v2; DATE:2014-02-07
|
||||
wiki.Db_mgr_as_sql().Tbl_xowa_db().Commit_all(db_fs.Conn_core(), db_fs.Files_ary()); // always save files now; need to commit created search_db_idx to xowa_db, else will be reused by ctg v2; DATE:2014-02-07
|
||||
}
|
||||
}
|
||||
public void Wkr_print() {}
|
||||
|
||||
@@ -38,15 +38,15 @@ public class Xob_search_sql_cmd extends Xob_itm_basic_base implements Xob_cmd {
|
||||
search_db = db_fs.Make(Xodb_file_tid.Tid_search);
|
||||
}
|
||||
DataRdr page_rdr = DataRdr_.Null;
|
||||
Db_provider search_provider = search_db.Provider();
|
||||
Db_conn search_provider = search_db.Conn();
|
||||
usr_dlg.Log_many("", "", "search_title.cmd: droping tables");
|
||||
Sqlite_engine_.Tbl_delete_many(search_provider, Xodb_tbl_search_title_temp.Tbl_name, Xodb_search_title_word_tbl.Tbl_name, Xodb_search_title_page_tbl.Tbl_name);
|
||||
usr_dlg.Log_many("", "", "search_title.cmd: creating db connection; conn=~{0}", search_provider.Conn_info().Str_raw());
|
||||
usr_dlg.Log_many("", "", "search_title.cmd: creating db connection; conn=~{0}", search_provider.Url().Xto_raw());
|
||||
Xodb_tbl_search_title_temp search_temp_tbl = new Xodb_tbl_search_title_temp().Create_table(search_provider);
|
||||
try {
|
||||
usr_dlg.Log_many("", "", "search_title.cmd: starting select;");
|
||||
search_provider.Txn_mgr().Txn_bgn_if_none();
|
||||
page_rdr = wiki.Db_mgr_as_sql().Tbl_page().Select_all(page_db.Provider());
|
||||
page_rdr = wiki.Db_mgr_as_sql().Tbl_page().Select_all(page_db.Conn());
|
||||
usr_dlg.Log_many("", "", "search_title.cmd: other init;");
|
||||
Db_stmt search_temp_stmt = search_temp_tbl.Insert_stmt(search_provider);
|
||||
Xol_lang lang = wiki.Lang();
|
||||
@@ -76,10 +76,10 @@ public class Xob_search_sql_cmd extends Xob_itm_basic_base implements Xob_cmd {
|
||||
search_provider.Txn_mgr().Txn_end_all_bgn_if_none();
|
||||
search_temp_tbl.Make_data(usr_dlg, search_provider);
|
||||
search_provider.Txn_mgr().Txn_bgn_if_none();
|
||||
wiki.Db_mgr_as_sql().Tbl_xowa_db().Commit_all(db_fs.Provider_core(), db_fs.Files_ary());
|
||||
wiki.Db_mgr_as_sql().Tbl_xowa_db().Commit_all(db_fs.Conn_core(), db_fs.Files_ary());
|
||||
search_provider.Txn_mgr().Txn_end_all();
|
||||
} private int commit_interval = 100000, progress_interval = 10000;
|
||||
private void Commit(Db_provider search_provider) {
|
||||
private void Commit(Db_conn search_provider) {
|
||||
search_provider.Txn_mgr().Txn_end_all_bgn_if_none();
|
||||
}
|
||||
@Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
|
||||
@@ -30,15 +30,15 @@ public class Xob_search_sql_wkr extends Xob_search_base implements Io_make_cmd {
|
||||
search_db = db_mgr.Fsys_mgr().Make(Xodb_file_tid.Tid_search);
|
||||
created = true;
|
||||
}
|
||||
provider = search_db.Provider();
|
||||
conn = search_db.Conn();
|
||||
if (created) {
|
||||
Xodb_search_title_word_tbl.Create_table(provider);
|
||||
Xodb_search_title_page_tbl.Create_table(provider);
|
||||
Xodb_search_title_word_tbl.Create_table(conn);
|
||||
Xodb_search_title_page_tbl.Create_table(conn);
|
||||
}
|
||||
provider.Txn_mgr().Txn_bgn_if_none();
|
||||
stmt_word = Xodb_search_title_word_tbl.Insert_stmt(provider);
|
||||
stmt_page = Xodb_search_title_page_tbl.Insert_stmt(provider);
|
||||
} private Db_provider provider; private int search_id = 0; private Db_stmt stmt_word, stmt_page;
|
||||
conn.Txn_mgr().Txn_bgn_if_none();
|
||||
stmt_word = Xodb_search_title_word_tbl.Insert_stmt(conn);
|
||||
stmt_page = Xodb_search_title_page_tbl.Insert_stmt(conn);
|
||||
} private Db_conn conn; private int search_id = 0; private Db_stmt stmt_word, stmt_page;
|
||||
public byte Line_dlm() {return line_dlm;} public Xob_search_sql_wkr Line_dlm_(byte v) {line_dlm = v; return this;} private byte line_dlm = Byte_ascii.Nil;
|
||||
private byte[] prv_word = Bry_.Empty;
|
||||
public void Sort_do(Io_line_rdr rdr) {
|
||||
@@ -52,13 +52,13 @@ public class Xob_search_sql_wkr extends Xob_search_base implements Io_make_cmd {
|
||||
Xodb_search_title_page_tbl.Insert(stmt_page, search_id, Base85_utl.XtoIntByAry(bry, rdr.Key_pos_end() + 1, rdr.Key_pos_end() + 5)); // -1: ignore rdr_dlm
|
||||
}
|
||||
public void Sort_end() {
|
||||
provider.Txn_mgr().Txn_end_all();
|
||||
Xodb_tbl_search_title_temp.Cleanup(usr_dlg, provider);
|
||||
conn.Txn_mgr().Txn_end_all();
|
||||
Xodb_tbl_search_title_temp.Cleanup(usr_dlg, conn);
|
||||
}
|
||||
}
|
||||
class Xodb_tbl_search_title_temp {
|
||||
public Xodb_tbl_search_title_temp Create_table(Db_provider p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql); return this;}
|
||||
public void Make_data(Gfo_usr_dlg usr_dlg, Db_provider p) {
|
||||
public Xodb_tbl_search_title_temp Create_table(Db_conn p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql); return this;}
|
||||
public void Make_data(Gfo_usr_dlg usr_dlg, Db_conn p) {
|
||||
Xodb_search_title_word_tbl.Create_table(p);
|
||||
Xodb_search_title_page_tbl.Create_table(p);
|
||||
p.Txn_mgr().Txn_end_all_bgn_if_none();
|
||||
@@ -73,7 +73,7 @@ class Xodb_tbl_search_title_temp {
|
||||
p.Txn_mgr().Txn_end(); // must end all transactions before vacuum
|
||||
p.Exec_sql("VACUUM;");
|
||||
}
|
||||
public static void Cleanup(Gfo_usr_dlg usr_dlg, Db_provider p) {
|
||||
public static void Cleanup(Gfo_usr_dlg usr_dlg, Db_conn p) {
|
||||
p.Exec_sql("DROP TABLE IF EXISTS search_title_temp;");
|
||||
try {
|
||||
Xodb_search_title_word_tbl.Create_index(usr_dlg, p);
|
||||
@@ -87,11 +87,11 @@ class Xodb_tbl_search_title_temp {
|
||||
Xodb_search_title_page_tbl.Create_index_non_unique(usr_dlg, p);
|
||||
}
|
||||
}
|
||||
public Db_stmt Insert_stmt(Db_provider p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_stt_page_id, Fld_stt_word);}
|
||||
public Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_stt_page_id, Fld_stt_word);}
|
||||
public void Insert(Db_stmt stmt, int page_id, byte[] word) {
|
||||
stmt.Clear()
|
||||
.Val_int_(page_id)
|
||||
.Val_str_by_bry_(word)
|
||||
.Val_int(page_id)
|
||||
.Val_bry_as_str(word)
|
||||
.Exec_insert();
|
||||
}
|
||||
public static final String Tbl_name = "search_title_temp", Fld_stt_page_id = "stt_page_id", Fld_stt_word = "stt_word";
|
||||
|
||||
@@ -23,10 +23,10 @@ public class Xob_term_sql extends Xob_term_base {
|
||||
@Override public void Cmd_end_hook() {
|
||||
Io_mgr._.DeleteDirDeep(wiki.Fsys_mgr().Tmp_dir());
|
||||
Xodb_mgr_sql db_mgr = wiki.Db_mgr_as_sql();
|
||||
db_mgr.Tbl_xowa_cfg().Insert_str_by_bry (Xodb_mgr_sql.Grp_wiki_init, "props.bldr_version", wiki.Props().Bldr_version());
|
||||
db_mgr.Tbl_xowa_cfg().Insert_str_by_bry (Xodb_mgr_sql.Grp_wiki_init, "props.main_page", wiki.Props().Main_page());
|
||||
db_mgr.Tbl_xowa_cfg().Insert_str_by_bry (Xodb_mgr_sql.Grp_wiki_init, "props.siteinfo_misc", wiki.Props().Siteinfo_misc());
|
||||
db_mgr.Tbl_xowa_cfg().Insert_str_by_bry (Xodb_mgr_sql.Grp_wiki_init, "props.siteinfo_mainpage", wiki.Props().Siteinfo_mainpage());
|
||||
db_mgr.Tbl_xowa_cfg().Insert_bry_as_str (Xodb_mgr_sql.Grp_wiki_init, "props.bldr_version", wiki.Props().Bldr_version());
|
||||
db_mgr.Tbl_xowa_cfg().Insert_bry_as_str (Xodb_mgr_sql.Grp_wiki_init, "props.main_page", wiki.Props().Main_page());
|
||||
db_mgr.Tbl_xowa_cfg().Insert_bry_as_str (Xodb_mgr_sql.Grp_wiki_init, "props.siteinfo_misc", wiki.Props().Siteinfo_misc());
|
||||
db_mgr.Tbl_xowa_cfg().Insert_bry_as_str (Xodb_mgr_sql.Grp_wiki_init, "props.siteinfo_mainpage", wiki.Props().Siteinfo_mainpage());
|
||||
wiki.Db_mgr_as_sql().Fsys_mgr().Rls();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ public class Xob_category_registry_sql implements Xob_cmd {
|
||||
Xob_tmp_wtr rslt_wtr = Xob_tmp_wtr.new_wo_ns_(Io_url_gen_.dir_(rslt_dir), Io_mgr.Len_mb);
|
||||
|
||||
Xodb_mgr_sql db_mgr = Xodb_mgr_sql.Get_or_load(wiki);
|
||||
Db_provider provider = db_mgr.Fsys_mgr().Provider_core();
|
||||
Db_conn conn = db_mgr.Fsys_mgr().Conn_core();
|
||||
Db_qry_select qry = Db_qry_select.new_()
|
||||
.Cols_(Xodb_page_tbl.Fld_page_title, Xodb_page_tbl.Fld_page_id)
|
||||
.From_(Xodb_page_tbl.Tbl_name)
|
||||
@@ -39,7 +39,7 @@ public class Xob_category_registry_sql implements Xob_cmd {
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
Gfo_usr_dlg usr_dlg = wiki.App().Usr_dlg();
|
||||
try {
|
||||
rdr = qry.Exec_qry_as_rdr(provider);
|
||||
rdr = qry.Exec_qry_as_rdr(conn);
|
||||
while (rdr.MoveNextPeer()) {
|
||||
byte[] page_ttl = rdr.ReadBryByStr(Xodb_page_tbl.Fld_page_title);
|
||||
int page_id = rdr.ReadInt(Xodb_page_tbl.Fld_page_id);
|
||||
|
||||
@@ -63,7 +63,7 @@ public abstract class Xob_categorylinks_base extends Xob_sql_dump_base implement
|
||||
fld_wtr.Write_int_base85_len5_fld(cur_id);
|
||||
fld_wtr.Write_int_base85_len5_fld(cur_date);
|
||||
}
|
||||
} int cur_id = -1, cur_date = -1; byte[] cur_ctg = null, cur_sortkey = null; byte cur_tid = Byte_.MaxValue_127; boolean cur_collation_is_uca; int[] cur_modified_on = new int[7];
|
||||
} int cur_id = -1, cur_date = -1; byte[] cur_ctg = null, cur_sortkey = null; byte cur_tid = Byte_.Max_value_127; boolean cur_collation_is_uca; int[] cur_modified_on = new int[7];
|
||||
@Override public void Cmd_end() {
|
||||
Xobdc_merger.Basic(bldr.Usr_dlg(), dump_url_gen, temp_dir.GenSubDir("sort"), sort_mem_len, Xoctg_link_sql_sorter._, Io_line_rdr_key_gen_.noop, Make_sort_cmd(sql_parser));
|
||||
wiki.Html_mgr().Importing_ctgs_(Bool_.N);
|
||||
|
||||
@@ -35,15 +35,15 @@ public class Xob_categorylinks_sql_make implements Io_make_cmd {
|
||||
Xodb_file category_file = fsys_mgr.Get_tid_root(Xodb_file_tid.Tid_core);
|
||||
if (cur_cat_file_max > 0) {
|
||||
category_file = fsys_mgr.Make(Xodb_file_tid.Tid_category);
|
||||
fsys_mgr.Provider_ctg_(category_file);
|
||||
fsys_mgr.Conn_ctg_(category_file);
|
||||
}
|
||||
|
||||
cat_provider = db_mgr.Fsys_mgr().Provider_ctg();
|
||||
cat_provider = db_mgr.Fsys_mgr().Conn_ctg();
|
||||
ctg_stmt = db_mgr.Tbl_category().Insert_stmt(cat_provider);
|
||||
File_open(category_file);
|
||||
first_provider = true;
|
||||
if (idx_mode.Tid_is_bgn()) Idx_create(fsys_mgr);
|
||||
} Db_provider cl_provider, cat_provider; Gfo_fld_rdr fld_rdr = Gfo_fld_rdr.xowa_(); Db_stmt cl_stmt = Db_stmt_.Null, ctg_stmt = Db_stmt_.Null; int row_count = 0; Gfo_usr_dlg usr_dlg; boolean first_provider;
|
||||
} Db_conn cl_provider, cat_provider; Gfo_fld_rdr fld_rdr = Gfo_fld_rdr.xowa_(); Db_stmt cl_stmt = Db_stmt_.Null, ctg_stmt = Db_stmt_.Null; int row_count = 0; Gfo_usr_dlg usr_dlg; boolean first_provider;
|
||||
int[] cur_cat_counts = new int[Xoa_ctg_mgr.Tid__max]; long cur_cat_file_size, cur_cat_file_max; byte[] cur_cat_ttl = Ttl_first; int cur_cat_id; int cur_cat_file_idx;
|
||||
public byte Line_dlm() {return line_dlm;} public Xob_categorylinks_sql_make Line_dlm_(byte v) {line_dlm = v; return this;} private byte line_dlm = Byte_ascii.Nil;
|
||||
public void Sort_do(Io_line_rdr rdr) {
|
||||
@@ -70,7 +70,7 @@ public class Xob_categorylinks_sql_make implements Io_make_cmd {
|
||||
Xodb_fsys_mgr fsys_mgr = db_mgr.Fsys_mgr();
|
||||
Ctg_grp_end(Ttl_last);
|
||||
File_close();
|
||||
db_mgr.Tbl_xowa_db().Commit_all(fsys_mgr.Provider_core(), fsys_mgr.Files_ary());
|
||||
db_mgr.Tbl_xowa_db().Commit_all(fsys_mgr.Conn_core(), fsys_mgr.Files_ary());
|
||||
if (db_mgr.Category_version() == Xoa_ctg_mgr.Version_null) // NOTE: ctg_v1 wkr will set this to v1; only set to v2 if null
|
||||
db_mgr.Category_version_update(false);
|
||||
usr_dlg.Log_many("", "", "import.category.v2: insert done; committing; rows=~{0}", row_count);
|
||||
@@ -96,7 +96,7 @@ public class Xob_categorylinks_sql_make implements Io_make_cmd {
|
||||
return cur_cat_id;
|
||||
}
|
||||
private void File_open(Xodb_file file) {
|
||||
cl_provider = file.Provider();
|
||||
cl_provider = file.Conn();
|
||||
cl_stmt = db_mgr.Tbl_categorylinks().Insert_stmt(cl_provider);
|
||||
cl_provider.Txn_mgr().Txn_bgn_if_none();
|
||||
cur_cat_file_idx = file.Id();
|
||||
|
||||
@@ -34,18 +34,18 @@ public class Xob_categorylinks_sql_tst {
|
||||
));
|
||||
fxt.Exec_run(new Xob_category_registry_sql(fxt.Bldr(), fxt.Wiki()));
|
||||
fxt.Exec_run(new Xob_categorylinks_sql(fxt.Bldr(), fxt.Wiki()));
|
||||
Db_provider provider = fxt.Wiki().Db_mgr_as_sql().Fsys_mgr().Provider_ctg();
|
||||
Db_conn conn = fxt.Wiki().Db_mgr_as_sql().Fsys_mgr().Conn_ctg();
|
||||
Db_tst_qry.tbl_(Xodb_category_tbl.Tbl_name, Xodb_category_tbl.Fld_cat_id)
|
||||
.Cols_(Xodb_category_tbl.Fld_cat_id, Xodb_category_tbl.Fld_cat_subcats, Xodb_category_tbl.Fld_cat_files, Xodb_category_tbl.Fld_cat_pages)
|
||||
.Rows_add_vals(1, 0, 0, 2)
|
||||
.Rows_add_vals(2, 0, 1, 0)
|
||||
.Test(provider);
|
||||
.Test(conn);
|
||||
Db_tst_qry.tbl_(Xodb_categorylinks_tbl.Tbl_name, Xodb_categorylinks_tbl.Fld_cl_from)
|
||||
.Cols_(Xodb_categorylinks_tbl.Fld_cl_from, Xodb_categorylinks_tbl.Fld_cl_to_id, Xodb_categorylinks_tbl.Fld_cl_sortkey, Xodb_categorylinks_tbl.Fld_cl_type_id)
|
||||
.Rows_add_vals(3, 2, "File:2a" , Xoa_ctg_mgr.Tid_file)
|
||||
.Rows_add_vals(4, 1, "1b" , Xoa_ctg_mgr.Tid_page)
|
||||
.Rows_add_vals(5, 1, "1a" , Xoa_ctg_mgr.Tid_page)
|
||||
.Test(provider);
|
||||
.Test(conn);
|
||||
}
|
||||
}
|
||||
class Db_tst_val {
|
||||
@@ -92,11 +92,11 @@ class Db_tst_qry {
|
||||
rows.Add(row);
|
||||
return this;
|
||||
}
|
||||
public void Test(Db_provider provider) {
|
||||
public void Test(Db_conn conn) {
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
Bry_bfr bfr = Bry_bfr.new_();
|
||||
try {
|
||||
rdr = provider.Exec_qry_as_rdr(qry);
|
||||
rdr = conn.Exec_qry_as_rdr(qry);
|
||||
int expd_row_idx = 0, expd_row_max = rows.Count();
|
||||
while (rdr.MoveNextPeer()) {
|
||||
if (expd_row_idx == expd_row_max) break;
|
||||
@@ -127,7 +127,7 @@ class Db_tst_qry {
|
||||
}
|
||||
if (!pass) {
|
||||
bfr.Add(Lbl_row_hdr).Add_int_variable(expd_row_idx).Add_byte_nl();
|
||||
bfr.Add_str(qry.XtoSql()).Add_byte(Byte_ascii.Semic);
|
||||
bfr.Add_str(qry.Xto_sql()).Add_byte(Byte_ascii.Semic);
|
||||
throw Err_.new_(bfr.Xto_str_and_clear());
|
||||
}
|
||||
} static final byte[] Lbl_row_hdr = Bry_.new_ascii_("row: "), Lbl_eq_y = Bry_.new_ascii_(" == "), Lbl_eq_n = Bry_.new_ascii_(" != ");
|
||||
|
||||
@@ -18,16 +18,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
|
||||
import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*;
|
||||
public class Xoctg_hiddencat_parser_sql extends Xoctg_hiddencat_parser_base {
|
||||
public Xoctg_hiddencat_parser_sql(Xob_bldr bldr, Xow_wiki wiki) {this.Ctor(bldr, wiki);}
|
||||
public Xoctg_hiddencat_parser_sql(Xob_bldr bldr, Xow_wiki wiki) {this.Ctor(bldr, wiki);} private Db_conn conn;
|
||||
@Override public String Cmd_key() {return KEY;} public static final String KEY = "import.sql.hiddencat";
|
||||
@Override public void Cmd_bgn_hook(Xob_bldr bldr, Sql_file_parser parser) {
|
||||
super.Cmd_bgn_hook(bldr, parser);
|
||||
Xodb_mgr_sql db_mgr = wiki.Db_mgr_as_sql();
|
||||
Xodb_fsys_mgr fsys_mgr = db_mgr.Fsys_mgr();
|
||||
Db_provider provider = fsys_mgr.Provider_ctg();
|
||||
provider.Txn_mgr().Txn_bgn_if_none();
|
||||
conn = fsys_mgr.Conn_ctg();
|
||||
conn.Txn_mgr().Txn_bgn_if_none();
|
||||
tbl = db_mgr.Tbl_category();
|
||||
stmt = tbl.Update_stmt(provider);
|
||||
stmt = tbl.Update_stmt(conn);
|
||||
}
|
||||
private Xodb_category_tbl tbl; private Db_stmt stmt;
|
||||
@Override public void Exec_hook(Bry_bfr file_bfr, int cur_id, boolean cur_is_hiddencat) {
|
||||
@@ -36,7 +36,7 @@ public class Xoctg_hiddencat_parser_sql extends Xoctg_hiddencat_parser_base {
|
||||
}
|
||||
@Override public void Cmd_end() {
|
||||
if (stmt == null) return; // stmt is null when ctg fails (for example, category files not downloaded); DATE:2013-12-20
|
||||
stmt.Provider().Txn_mgr().Txn_end_all();
|
||||
conn.Txn_mgr().Txn_end_all();
|
||||
if (!Env_.Mode_testing()) // NOTE: do not delete when testing
|
||||
Io_mgr._.DeleteDirDeep(wiki.Fsys_mgr().Tmp_dir()); // delete /wiki/wiki_name/tmp
|
||||
Io_url[] sql_files = Io_mgr._.QueryDir_args(wiki.Fsys_mgr().Root_dir()).FilPath_("*.sql.gz").ExecAsUrlAry();
|
||||
|
||||
@@ -40,8 +40,8 @@ public class Xoctg_hiddencat_parser_sql_tst {
|
||||
private void Init_ctgs(int... ctgs) {
|
||||
int len = ctgs.length;
|
||||
Xodb_category_tbl tbl = fxt.Wiki().Db_mgr_as_sql().Tbl_category();
|
||||
Db_provider provider = fxt.Wiki().Db_mgr_as_sql().Fsys_mgr().Provider_ctg();
|
||||
Db_stmt stmt = tbl.Insert_stmt(provider);
|
||||
Db_conn conn = fxt.Wiki().Db_mgr_as_sql().Fsys_mgr().Conn_ctg();
|
||||
Db_stmt stmt = tbl.Insert_stmt(conn);
|
||||
try {
|
||||
for (int i = 0; i < len; i++) {
|
||||
int ctg_id = ctgs[i];
|
||||
@@ -52,10 +52,10 @@ public class Xoctg_hiddencat_parser_sql_tst {
|
||||
private void Tst_ctg_hidden(boolean expd_hidden, int... ctgs) {
|
||||
int len = ctgs.length;
|
||||
Xodb_category_tbl tbl = fxt.Wiki().Db_mgr_as_sql().Tbl_category();
|
||||
Db_provider provider = fxt.Wiki().Db_mgr_as_sql().Fsys_mgr().Provider_ctg();
|
||||
Db_conn conn = fxt.Wiki().Db_mgr_as_sql().Fsys_mgr().Conn_ctg();
|
||||
for (int i = 0; i < len; i++) {
|
||||
int ctg_id = ctgs[i];
|
||||
Xodb_category_itm ctg_itm = tbl.Select(provider, ctg_id);
|
||||
Xodb_category_itm ctg_itm = tbl.Select(conn, ctg_id);
|
||||
Tfds.Eq(expd_hidden, ctg_itm.Hidden(), Int_.Xto_str(ctg_id));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,9 +25,9 @@ public class Xob_bmk_mgr implements GfoInvkAble {
|
||||
public byte[] Ttl_prv() {return ttl_prv;} private byte[] ttl_prv;
|
||||
private boolean repo_enable, ns_enable, ttl_enable;
|
||||
private boolean repo_dirty, ns_dirty, ttl_dirty;
|
||||
public Xob_bmk_mgr Init(Db_provider p, String grp, boolean repo_enable, boolean ns_enable, boolean ttl_enable) {
|
||||
public Xob_bmk_mgr Init(Db_conn p, String grp, boolean repo_enable, boolean ns_enable, boolean ttl_enable) {
|
||||
this.cfg_grp = grp;
|
||||
cfg_tbl = new Xodb_xowa_cfg_tbl().Provider_(p);
|
||||
cfg_tbl = new Xodb_xowa_cfg_tbl().Conn_(p);
|
||||
cfg_stmt = cfg_tbl.Update_stmt();
|
||||
this.repo_enable = repo_enable;
|
||||
this.ns_enable = ns_enable;
|
||||
@@ -96,6 +96,6 @@ public class Xob_bmk_mgr implements GfoInvkAble {
|
||||
private static final String Invk_repo_prv_ = "repo_prv_", Invk_ns_prv_ = "ns_prv_", Invk_ttl_prv_ = "ttl_prv_";
|
||||
private static final String Cfg_repo_prv = "repo_prv", Cfg_ns_prv = "ns_prv", Cfg_ttl_prv = "ttl_prv";
|
||||
private static final int Null_ns = -1;
|
||||
// public static final byte Null_repo = Byte_.MaxValue_127;
|
||||
// public static final byte Null_repo = Byte_.Max_value_127;
|
||||
// public static final byte[ Null_ttl = null;
|
||||
}
|
||||
|
||||
@@ -39,20 +39,20 @@ public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xo
|
||||
ctx = wiki.Ctx();
|
||||
root = ctx.Tkn_mkr().Root(Bry_.Empty);
|
||||
wiki.Init_assert(); // NOTE: must init wiki for db_mgr_as_sql
|
||||
wiki.Db_mgr_as_sql().Init_load(Db_conn_info_.sqlite_(Xodb_mgr_sql.Find_core_url(wiki))); // NOTE: must reinit providers as previous steps may have rls'd (and left member variable provider which is closed)
|
||||
wiki.Db_mgr_as_sql().Init_load(Db_url_.sqlite_(Xodb_mgr_sql.Find_core_url(wiki))); // NOTE: must reinit providers as previous steps may have rls'd (and left member variable conn which is closed)
|
||||
db_fsys_mgr = wiki.Db_mgr_as_sql().Fsys_mgr();
|
||||
db_ary = Xob_dump_src_ttl.Init_text_files_ary(db_fsys_mgr);
|
||||
poll_interval = poll_mgr.Poll_interval();
|
||||
|
||||
page_src = new Xob_dump_src_id().Init(wiki, this.Init_redirect(), select_size);
|
||||
ns_ary = Init_ns_ary();
|
||||
Db_provider provider = Init_db_file();
|
||||
Db_conn conn = Init_db_file();
|
||||
Io_url wiki_dir = wiki.Fsys_mgr().Root_dir();
|
||||
bmk_mgr.Cfg_url_(wiki_dir.GenSubFil("xowa.file.make.cfg.gfs"));
|
||||
rate_mgr.Log_file_(wiki_dir.GenSubFil("xowa.file.make.log.csv"));
|
||||
if (reset_db) {
|
||||
bmk_mgr.Reset();
|
||||
Init_reset(provider);
|
||||
Init_reset(conn);
|
||||
}
|
||||
bmk_mgr.Load(wiki.App(), this);
|
||||
Cmd_bgn_end();
|
||||
@@ -60,8 +60,8 @@ public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xo
|
||||
protected abstract void Cmd_bgn_end();
|
||||
public abstract byte Init_redirect();
|
||||
public abstract int[] Init_ns_ary();
|
||||
protected abstract void Init_reset(Db_provider p);
|
||||
protected abstract Db_provider Init_db_file();
|
||||
protected abstract void Init_reset(Db_conn p);
|
||||
protected abstract Db_conn Init_db_file();
|
||||
private long time_bgn;
|
||||
public void Cmd_run() {Exec_ns_ary();}
|
||||
private void Exec_ns_ary() {
|
||||
|
||||
@@ -21,7 +21,7 @@ class Xob_dump_src_ttl implements Xob_parse_all_db {
|
||||
private Xodb_mgr_sql db_mgr; private Db_stmt page_stmt; private Xodb_file[] text_files_ary; private int text_files_len; private byte redirect;
|
||||
public Xob_dump_src_ttl Init(Xow_wiki wiki, int limit, byte redirect) {
|
||||
this.db_mgr = wiki.Db_mgr_as_sql(); this.redirect = redirect;
|
||||
page_stmt = db_mgr.Tbl_page().Select_for_parse_all_stmt(db_mgr.Fsys_mgr().Provider_core(), limit, redirect);
|
||||
page_stmt = db_mgr.Tbl_page().Select_for_parse_all_stmt(db_mgr.Fsys_mgr().Conn_core(), limit, redirect);
|
||||
text_files_ary = Init_text_files_ary(db_mgr.Fsys_mgr());
|
||||
text_files_len = text_files_ary.length;
|
||||
return this;
|
||||
@@ -77,11 +77,11 @@ class Xob_dump_src_id {
|
||||
if (cur_text_db_idx != text_db_idx) {
|
||||
cur_text_db_idx = text_db_idx;
|
||||
Xodb_file text_db = db_mgr.Fsys_mgr().Get_by_idx(text_db_idx);
|
||||
Db_provider provider = text_db.Provider();
|
||||
Db_conn conn = text_db.Conn();
|
||||
String sql = String_.Format(Sql_select, New_rdr__redirect_clause(redirect));
|
||||
text_stmt = provider.Prepare(Db_qry_sql.rdr_(sql));
|
||||
text_stmt = conn.New_stmt(Db_qry_sql.rdr_(sql));
|
||||
}
|
||||
return text_stmt.Clear().Val_int_(prv_id).Val_int_(cur_ns).Exec_select();
|
||||
return text_stmt.Clear().Val_int(prv_id).Val_int(cur_ns).Exec_select();
|
||||
}
|
||||
private static Xodb_page New_page(Xodb_mgr_sql db_mgr, int ns_id, DataRdr rdr) {
|
||||
Xodb_page rv = new Xodb_page();
|
||||
|
||||
@@ -48,13 +48,13 @@ public class Xob_text_db_prep extends Xob_itm_basic_base implements Xob_cmd {
|
||||
public void Cmd_print() {}
|
||||
private void Prep_db(String page_db_url, Xodb_file text_db) {
|
||||
usr_dlg.Note_many("", "", "copying page_rows to text_db: ~{0}", text_db.Url().NameOnly());
|
||||
Db_provider provider = text_db.Provider();
|
||||
Sqlite_engine_.Tbl_create_and_delete(provider, "page_dump", Sql_create_tbl);
|
||||
Sqlite_engine_.Db_attach(provider, "page_db", page_db_url);
|
||||
provider.Txn_mgr().Txn_bgn_if_none();
|
||||
provider.Exec_sql(String_.Format(Sql_insert_data, text_db.Id()));
|
||||
provider.Txn_mgr().Txn_end_all();
|
||||
Sqlite_engine_.Idx_create(provider, Idx_create);
|
||||
Db_conn conn = text_db.Conn();
|
||||
Sqlite_engine_.Tbl_create_and_delete(conn, "page_dump", Sql_create_tbl);
|
||||
Sqlite_engine_.Db_attach(conn, "page_db", page_db_url);
|
||||
conn.Txn_mgr().Txn_bgn_if_none();
|
||||
conn.Exec_sql(String_.Format(Sql_insert_data, text_db.Id()));
|
||||
conn.Txn_mgr().Txn_end_all();
|
||||
Sqlite_engine_.Idx_create(conn, Idx_create);
|
||||
}
|
||||
private static final String Sql_create_tbl = String_.Concat_lines_nl
|
||||
( "CREATE TABLE IF NOT EXISTS page_dump"
|
||||
|
||||
@@ -26,19 +26,19 @@ public class Xob_xfer_update_cmd extends Xob_itm_basic_base implements Xob_cmd {
|
||||
public void Cmd_run() {
|
||||
// init vars
|
||||
Xodb_db_file cur_file = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir());
|
||||
Db_provider provider = cur_file.Provider();
|
||||
Db_conn conn = cur_file.Conn();
|
||||
if (prv_url == null) {
|
||||
prv_url = wiki.App().Fsys_mgr().File_dir().GenSubFil_nest(wiki.Domain_str(), "bldr", Xodb_db_file.Name__file_make);
|
||||
}
|
||||
|
||||
// run sql
|
||||
Sqlite_engine_.Tbl_rename(provider, "xfer_regy", "xfer_regy_old");
|
||||
Xob_xfer_regy_tbl.Create_table(provider);
|
||||
Sqlite_engine_.Db_attach(provider, "old_db", prv_url.Raw());
|
||||
provider.Exec_sql(Sql_update);
|
||||
Sqlite_engine_.Db_detach(provider, "old_db");
|
||||
Sqlite_engine_.Tbl_delete(provider, "xfer_regy_old");
|
||||
Xob_xfer_regy_tbl.Create_index(usr_dlg, provider);
|
||||
Sqlite_engine_.Tbl_rename(conn, "xfer_regy", "xfer_regy_old");
|
||||
Xob_xfer_regy_tbl.Create_table(conn);
|
||||
Sqlite_engine_.Db_attach(conn, "old_db", prv_url.Raw());
|
||||
conn.Exec_sql(Sql_update);
|
||||
Sqlite_engine_.Db_detach(conn, "old_db");
|
||||
Sqlite_engine_.Tbl_delete(conn, "xfer_regy_old");
|
||||
Xob_xfer_regy_tbl.Create_index(usr_dlg, conn);
|
||||
|
||||
// // rotate db
|
||||
// DateAdp wiki_date = wiki.Db_mgr().Dump_date_query();
|
||||
|
||||
@@ -18,9 +18,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.oimgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
|
||||
import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*;
|
||||
public class Xodb_db_file {
|
||||
Xodb_db_file(Io_url url, Db_provider provider, boolean created) {this.url = url; this.provider = provider; this.created = created;}
|
||||
Xodb_db_file(Io_url url, Db_conn conn, boolean created) {this.url = url; this.conn = conn; this.created = created;}
|
||||
public Io_url Url() {return url;} private Io_url url;
|
||||
public Db_provider Provider() {return provider;} private Db_provider provider;
|
||||
public Db_conn Conn() {return conn;} private Db_conn conn;
|
||||
public boolean Created() {return created;} public void Created_clear() {created = false;} private boolean created;
|
||||
|
||||
public static Xodb_db_file init__file_make(Io_url dir) {return init_(dir, Name__file_make);}
|
||||
@@ -31,12 +31,12 @@ public class Xodb_db_file {
|
||||
public static Xodb_db_file init_(Io_url dir, String name) {
|
||||
Io_url url = dir.GenSubFil(name);
|
||||
Bool_obj_ref created = Bool_obj_ref.n_();
|
||||
Db_provider provider = Sqlite_engine_.Provider_load_or_make_(url, created);
|
||||
Db_conn conn = Sqlite_engine_.Conn_load_or_make_(url, created);
|
||||
if (created.Val()) { // always create cfg table
|
||||
Xodb_xowa_cfg_tbl.Create_table(provider);
|
||||
Xodb_xowa_cfg_tbl.Create_index(provider);
|
||||
Xodb_xowa_cfg_tbl.Create_table(conn);
|
||||
Xodb_xowa_cfg_tbl.Create_index(conn);
|
||||
}
|
||||
return new Xodb_db_file(url, provider, created.Val());
|
||||
return new Xodb_db_file(url, conn, created.Val());
|
||||
}
|
||||
public static final String
|
||||
Name__wiki_image = "xowa.wiki.image.sqlite3", Name__wiki_redirect = "xowa.wiki.redirect.sqlite3"
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wikis.images; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wikis.*;
|
||||
import gplx.ios.*; import gplx.xowa.bldrs.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.bldrs.oimgs.*;
|
||||
public class Xob_wiki_image_sql extends Xob_itm_dump_base implements Xob_cmd, GfoInvkAble, Sql_file_parser_cmd {
|
||||
private Db_provider provider = null; private Db_stmt stmt = null;
|
||||
private Db_conn conn = null; private Db_stmt stmt = null;
|
||||
private Xob_wiki_image_tbl tbl_image = new Xob_wiki_image_tbl();
|
||||
private byte[] cur_ttl, cur_media_type, cur_minor_mime, cur_timestamp; private int cur_size, cur_width, cur_height, cur_bits, cur_ext_id;
|
||||
private int commit_count = 10000;
|
||||
@@ -36,16 +36,16 @@ public class Xob_wiki_image_sql extends Xob_itm_dump_base implements Xob_cmd, Gf
|
||||
}
|
||||
parser.Src_fil_(src_fil).Trg_fil_gen_(dump_url_gen).Fld_cmd_(this).Flds_req_idx_(20, Fld_img_name, Fld_img_size, Fld_img_width, Fld_img_height, Fld_img_bits, Fld_img_media_type, Fld_img_minor_mime, Fld_img_timestamp);
|
||||
|
||||
provider = Xodb_db_file.init__wiki_image(wiki.Fsys_mgr().Root_dir()).Provider();
|
||||
provider.Txn_mgr().Txn_bgn_if_none();
|
||||
conn = Xodb_db_file.init__wiki_image(wiki.Fsys_mgr().Root_dir()).Conn();
|
||||
conn.Txn_mgr().Txn_bgn_if_none();
|
||||
tbl_image = new Xob_wiki_image_tbl();
|
||||
tbl_image.Create_table(provider);
|
||||
stmt = tbl_image.Insert_stmt(provider);
|
||||
tbl_image.Create_table(conn);
|
||||
stmt = tbl_image.Insert_stmt(conn);
|
||||
}
|
||||
public void Cmd_run() {
|
||||
parser.Parse(bldr.Usr_dlg());
|
||||
tbl_image.Create_index(provider);
|
||||
provider.Txn_mgr().Txn_end_all();
|
||||
tbl_image.Create_index(conn);
|
||||
conn.Txn_mgr().Txn_end_all();
|
||||
}
|
||||
public void Exec(byte[] src, byte[] fld_key, int fld_idx, int fld_bgn, int fld_end, Bry_bfr file_bfr, Sql_file_parser_data data) {
|
||||
switch (fld_idx) {
|
||||
@@ -62,7 +62,7 @@ public class Xob_wiki_image_sql extends Xob_itm_dump_base implements Xob_cmd, Gf
|
||||
++commit_count;
|
||||
if ((commit_count % 10000) == 0) {
|
||||
usr_dlg.Prog_many("", "", "committing: count=~{0} last=~{1}", commit_count, String_.new_utf8_(cur_ttl));
|
||||
provider.Txn_mgr().Txn_end_all_bgn_if_none();
|
||||
conn.Txn_mgr().Txn_end_all_bgn_if_none();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -18,20 +18,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wikis.images; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wikis.*;
|
||||
import gplx.dbs.*;
|
||||
public class Xob_wiki_image_tbl {
|
||||
public Xob_wiki_image_tbl Create_table(Db_provider p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql); return this;}
|
||||
public Xob_wiki_image_tbl Create_index(Db_provider p) {Sqlite_engine_.Idx_create(p, Idx_img_name); return this;}
|
||||
public Db_stmt Insert_stmt(Db_provider p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_img_name, Fld_img_media_type, Fld_img_minor_mime, Fld_img_size, Fld_img_width, Fld_img_height, Fld_img_bits, Fld_img_ext_id, Fld_img_timestamp);}
|
||||
public Xob_wiki_image_tbl Create_table(Db_conn p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql); return this;}
|
||||
public Xob_wiki_image_tbl Create_index(Db_conn p) {Sqlite_engine_.Idx_create(p, Idx_img_name); return this;}
|
||||
public Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_img_name, Fld_img_media_type, Fld_img_minor_mime, Fld_img_size, Fld_img_width, Fld_img_height, Fld_img_bits, Fld_img_ext_id, Fld_img_timestamp);}
|
||||
public void Insert(Db_stmt stmt, byte[] ttl, byte[] media_type, byte[] minor_mime, int size, int w, int h, int bits, int ext_id, byte[] img_timestamp) {
|
||||
stmt.Clear()
|
||||
.Val_str_by_bry_(ttl)
|
||||
.Val_str_by_bry_(media_type)
|
||||
.Val_str_by_bry_(minor_mime)
|
||||
.Val_int_(size)
|
||||
.Val_int_(w)
|
||||
.Val_int_(h)
|
||||
.Val_int_(bits)
|
||||
.Val_int_(ext_id)
|
||||
.Val_str_by_bry_(img_timestamp)
|
||||
.Val_bry_as_str(ttl)
|
||||
.Val_bry_as_str(media_type)
|
||||
.Val_bry_as_str(minor_mime)
|
||||
.Val_int(size)
|
||||
.Val_int(w)
|
||||
.Val_int(h)
|
||||
.Val_int(bits)
|
||||
.Val_int(ext_id)
|
||||
.Val_bry_as_str(img_timestamp)
|
||||
.Exec_insert();
|
||||
}
|
||||
public static final String Tbl_name = "image"
|
||||
|
||||
@@ -18,25 +18,25 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wikis.redirects; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wikis.*;
|
||||
import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.bldrs.oimgs.*;
|
||||
public class Xob_redirect_cmd extends Xob_dump_mgr_base {
|
||||
private Db_provider provider; private Xob_redirect_tbl redirect_tbl;
|
||||
private Db_conn conn; private Xob_redirect_tbl redirect_tbl;
|
||||
private Xodb_mgr_sql db_mgr; private Xop_redirect_mgr redirect_mgr; private Url_encoder encoder;
|
||||
public Xob_redirect_cmd(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
|
||||
@Override public String Cmd_key() {return KEY_redirect;} public static final String KEY_redirect = "wiki.redirect";
|
||||
@Override public int[] Init_ns_ary() {return Int_.Ary(Xow_ns_.Id_file);} // restrict to file ns
|
||||
@Override public byte Init_redirect() {return Bool_.Y_byte;} // restrict to redirects
|
||||
@Override protected void Init_reset(Db_provider p) {
|
||||
@Override protected void Init_reset(Db_conn p) {
|
||||
p.Exec_sql("DELETE FROM " + Xodb_xowa_cfg_tbl.Tbl_name);
|
||||
p.Exec_sql("DELETE FROM " + Xob_redirect_tbl.Tbl_name);
|
||||
}
|
||||
@Override protected Db_provider Init_db_file() {
|
||||
@Override protected Db_conn Init_db_file() {
|
||||
this.db_mgr = wiki.Db_mgr_as_sql();
|
||||
Xoa_app app = bldr.App();
|
||||
redirect_mgr = wiki.Redirect_mgr();
|
||||
encoder = app.Encoder_mgr().Url_ttl();
|
||||
redirect_tbl = new Xob_redirect_tbl(wiki.Fsys_mgr().Root_dir(), app.Encoder_mgr().Url_ttl()).Create_table();
|
||||
provider = redirect_tbl.Provider();
|
||||
provider.Txn_mgr().Txn_bgn_if_none();
|
||||
return provider;
|
||||
conn = redirect_tbl.Conn();
|
||||
conn.Txn_mgr().Txn_bgn_if_none();
|
||||
return conn;
|
||||
}
|
||||
|
||||
@Override protected void Cmd_bgn_end() {}
|
||||
@@ -47,10 +47,10 @@ public class Xob_redirect_cmd extends Xob_dump_mgr_base {
|
||||
redirect_tbl.Insert(page.Id(), Xoa_ttl.Replace_spaces(page.Ttl_wo_ns()), -1, redirect_ttl.Ns().Id(), redirect_ttl_bry, redirect_ttl.Anch_txt(), 1);
|
||||
}
|
||||
@Override public void Exec_commit_hook() {
|
||||
provider.Txn_mgr().Txn_end_all_bgn_if_none();
|
||||
conn.Txn_mgr().Txn_end_all_bgn_if_none();
|
||||
}
|
||||
@Override public void Exec_end_hook() {
|
||||
provider.Txn_mgr().Txn_end_all();
|
||||
conn.Txn_mgr().Txn_end_all();
|
||||
redirect_tbl.Create_indexes(usr_dlg);
|
||||
redirect_tbl.Update_trg_redirect_id(db_mgr.Fsys_mgr().Get_url(Xodb_file_tid.Tid_core), 4);
|
||||
}
|
||||
|
||||
@@ -21,31 +21,31 @@ public class Xob_redirect_tbl {
|
||||
private Url_encoder encoder; private Db_stmt insert_stmt;
|
||||
public Xob_redirect_tbl(Io_url root_dir, Url_encoder encoder) {
|
||||
this.db_file = Xodb_db_file.init__wiki_redirect(root_dir);
|
||||
this.provider = db_file.Provider();
|
||||
this.conn = db_file.Conn();
|
||||
this.encoder = encoder;
|
||||
}
|
||||
public Xodb_db_file Db_file() {return db_file;} private Xodb_db_file db_file;
|
||||
public Db_provider Provider() {return provider;} private Db_provider provider;
|
||||
public Xob_redirect_tbl Create_table() {Sqlite_engine_.Tbl_create(provider, Tbl_name, Tbl_sql); return this;}
|
||||
public Db_conn Conn() {return conn;} private Db_conn conn;
|
||||
public Xob_redirect_tbl Create_table() {Sqlite_engine_.Tbl_create(conn, Tbl_name, Tbl_sql); return this;}
|
||||
public void Create_indexes(Gfo_usr_dlg usr_dlg) {
|
||||
Sqlite_engine_.Idx_create(usr_dlg, provider, Xodb_db_file.Name__wiki_redirect, Idx_trg_id, Idx_trg_ttl);
|
||||
Sqlite_engine_.Idx_create(usr_dlg, conn, Xodb_db_file.Name__wiki_redirect, Idx_trg_id, Idx_trg_ttl);
|
||||
}
|
||||
public void Update_trg_redirect_id(Io_url core_url, int max_redirected_depth) {
|
||||
Sqlite_engine_.Db_attach(provider, "page_db", core_url.Raw()); // link database with page table
|
||||
provider.Exec_sql(Sql_get_page_data); // fill in page_id, page_ns, page_is_redirect for trg_ttl; EX: Page_A has "#REDIRECT Page_B"; Page_B is in redirect tbl; find its id, ttl, redirect status
|
||||
Sqlite_engine_.Db_attach(conn, "page_db", core_url.Raw()); // link database with page table
|
||||
conn.Exec_sql(Sql_get_page_data); // fill in page_id, page_ns, page_is_redirect for trg_ttl; EX: Page_A has "#REDIRECT Page_B"; Page_B is in redirect tbl; find its id, ttl, redirect status
|
||||
for (int i = 0; i < max_redirected_depth; i++) { // loop to find redirected redirects; note that it is bounded by depth (to guard against circular redirects)
|
||||
int affected = provider.Exec_sql(Sql_get_redirect_redirects); // find redirects that are also redirects
|
||||
int affected = conn.Exec_sql(Sql_get_redirect_redirects); // find redirects that are also redirects
|
||||
if (affected == 0) break; // no more redirected redirects; stop
|
||||
provider.Exec_sql(Sql_get_redirect_page_data); // get page data for redirects
|
||||
conn.Exec_sql(Sql_get_redirect_page_data); // get page data for redirects
|
||||
}
|
||||
Sqlite_engine_.Db_detach(provider, "page_db");
|
||||
Sqlite_engine_.Db_detach(conn, "page_db");
|
||||
}
|
||||
public void Update_src_redirect_id(Io_url core_url, Db_provider core_provider) {
|
||||
public void Update_src_redirect_id(Io_url core_url, Db_conn core_provider) {
|
||||
core_provider.Exec_sql(Sql_ddl__page_redirect_id); // create page.page_redirect_id
|
||||
Sqlite_engine_.Idx_create(provider, Idx_trg_src);
|
||||
Sqlite_engine_.Db_attach(provider, "page_db", core_url.Raw()); // link database with page table
|
||||
provider.Exec_sql(Sql_update_redirect_id); // update page_redirect_id
|
||||
Sqlite_engine_.Db_detach(provider, "page_db");
|
||||
Sqlite_engine_.Idx_create(conn, Idx_trg_src);
|
||||
Sqlite_engine_.Db_attach(conn, "page_db", core_url.Raw()); // link database with page table
|
||||
conn.Exec_sql(Sql_update_redirect_id); // update page_redirect_id
|
||||
Sqlite_engine_.Db_detach(conn, "page_db");
|
||||
}
|
||||
public void Insert(int src_id, byte[] src_bry, Xoa_ttl trg_ttl) {
|
||||
byte[] redirect_ttl_bry = Xoa_ttl.Replace_spaces(trg_ttl.Page_db()); // NOTE: spaces can still exist b/c redirect is scraped from #REDIRECT which sometimes has a mix; EX: "A_b c"
|
||||
@@ -53,21 +53,21 @@ public class Xob_redirect_tbl {
|
||||
this.Insert(src_id, Xoa_ttl.Replace_spaces(src_bry), -1, trg_ttl.Ns().Id(), redirect_ttl_bry, trg_ttl.Anch_txt(), 1);
|
||||
}
|
||||
public void Insert(int src_id, byte[] src_ttl, int trg_id, int trg_ns, byte[] trg_ttl, byte[] trg_anchor, int count) {
|
||||
if (insert_stmt == null) insert_stmt = Db_stmt_.new_insert_(provider, Tbl_name, Fld_src_id, Fld_src_ttl, Fld_trg_id, Fld_trg_ns, Fld_trg_ttl, Fld_trg_anchor, Fld_trg_is_redirect, Fld_redirect_count);
|
||||
if (insert_stmt == null) insert_stmt = Db_stmt_.new_insert_(conn, Tbl_name, Fld_src_id, Fld_src_ttl, Fld_trg_id, Fld_trg_ns, Fld_trg_ttl, Fld_trg_anchor, Fld_trg_is_redirect, Fld_redirect_count);
|
||||
insert_stmt.Clear()
|
||||
.Val_int_(src_id)
|
||||
.Val_str_by_bry_(src_ttl)
|
||||
.Val_int_(trg_id)
|
||||
.Val_int_(trg_ns)
|
||||
.Val_str_by_bry_(trg_ttl)
|
||||
.Val_str_by_bry_(trg_anchor)
|
||||
.Val_byte_((byte)1)
|
||||
.Val_int_(count)
|
||||
.Val_int(src_id)
|
||||
.Val_bry_as_str(src_ttl)
|
||||
.Val_int(trg_id)
|
||||
.Val_int(trg_ns)
|
||||
.Val_bry_as_str(trg_ttl)
|
||||
.Val_bry_as_str(trg_anchor)
|
||||
.Val_byte((byte)1)
|
||||
.Val_int(count)
|
||||
.Exec_insert();
|
||||
}
|
||||
public void Rls_all() {
|
||||
insert_stmt.Rls();
|
||||
provider.Conn_term();
|
||||
conn.Conn_term();
|
||||
}
|
||||
public static final String Tbl_name = "redirect";
|
||||
private static final String
|
||||
|
||||
@@ -60,6 +60,6 @@ public class Xoa_ctg_mgr implements GfoInvkAble {
|
||||
}
|
||||
}
|
||||
public static final byte Version_null = Byte_.Zero, Version_1 = 1, Version_2 = 2;
|
||||
public static final byte Tid_null = Byte_.MaxValue_127, Tid_subc = 0, Tid_file = 1, Tid_page = 2, Tid__max = 3;
|
||||
public static final byte Tid_null = Byte_.Max_value_127, Tid_subc = 0, Tid_file = 1, Tid_page = 2, Tid__max = 3;
|
||||
public static final byte Hidden_n = Byte_.Zero, Hidden_y = (byte)1;
|
||||
}
|
||||
|
||||
@@ -26,18 +26,18 @@ public class Xodb_file {
|
||||
public long File_len() {return file_len;} public Xodb_file File_len_add(int v) {file_len += v; return this;} private long file_len;
|
||||
public long File_max() {return file_max;} public Xodb_file File_max_(long v) {file_max = v; return this;} private long file_max;
|
||||
public byte Cmd_mode() {return cmd_mode;} public Xodb_file Cmd_mode_(byte v) {cmd_mode = v; return this;} private byte cmd_mode;
|
||||
public Db_conn_info Connect() {return connect;} public Xodb_file Connect_(Db_conn_info v) {connect = v; return this;} private Db_conn_info connect;
|
||||
public Db_provider Provider() {
|
||||
if (provider == null) provider = Db_provider_pool._.Get_or_new(connect);
|
||||
return provider;
|
||||
} private Db_provider provider;
|
||||
public void Provider_(Db_provider p) {provider = p;}
|
||||
public Db_url Connect() {return connect;} public Xodb_file Connect_(Db_url v) {connect = v; return this;} private Db_url connect;
|
||||
public Db_conn Conn() {
|
||||
if (conn == null) conn = Db_conn_pool_old._.Get_or_new(connect);
|
||||
return conn;
|
||||
} private Db_conn conn;
|
||||
public void Conn_(Db_conn p) {conn = p;}
|
||||
public void Rls() {
|
||||
if (provider == null) return;
|
||||
if (conn == null) return;
|
||||
try {
|
||||
provider.Txn_mgr().Txn_end_all(); // close any open transactions
|
||||
provider.Conn_term();
|
||||
} finally {provider = null;}
|
||||
conn.Txn_mgr().Txn_end_all(); // close any open transactions
|
||||
conn.Conn_term();
|
||||
} finally {conn = null;}
|
||||
}
|
||||
public static Xodb_file load_(int id, byte tid, String url) {return new Xodb_file(id, tid).Url_rel_(url).Cmd_mode_(Db_cmd_mode.Ignore);}
|
||||
public static Xodb_file make_(int id, byte tid, String url) {return new Xodb_file(id, tid).Url_rel_(url).Cmd_mode_(Db_cmd_mode.Create);}
|
||||
|
||||
@@ -21,23 +21,23 @@ public class Xodb_fsys_mgr {
|
||||
private final Io_url src_dir; private final Io_url trg_dir; private final String wiki_name;
|
||||
public Xodb_fsys_mgr(Io_url src_dir, Io_url trg_dir, String wiki_name) {this.src_dir = src_dir; this.trg_dir = trg_dir; this.wiki_name = wiki_name;}
|
||||
public Xodb_file[] Files_ary() {return files_ary;}
|
||||
public Db_provider Provider_core() {return provider_core;} private Db_provider provider_core;
|
||||
public Db_provider Provider_page() {return provider_page;} private Db_provider provider_page;
|
||||
public Db_provider Provider_ctg() {return provider_ctg;} public void Provider_ctg_(Xodb_file file) {provider_ctg = file.Provider();} private Db_provider provider_ctg;
|
||||
public Db_provider Provider_wdata() {return provider_wdata;}public void Provider_wdata_(Xodb_file file) {provider_wdata = file.Provider();} private Db_provider provider_wdata;
|
||||
public Db_conn Conn_core() {return provider_core;} private Db_conn provider_core;
|
||||
public Db_conn Conn_page() {return provider_page;} private Db_conn provider_page;
|
||||
public Db_conn Conn_ctg() {return provider_ctg;} public void Conn_ctg_(Xodb_file file) {provider_ctg = file.Conn();} private Db_conn provider_ctg;
|
||||
public Db_conn Conn_wdata() {return provider_wdata;}public void Conn_wdata_(Xodb_file file) {provider_wdata = file.Conn();} private Db_conn provider_wdata;
|
||||
public int Tid_text_idx() {return tid_text_idx;} public Xodb_fsys_mgr Tid_text_idx_(int v) {tid_text_idx = v; return this;} private int tid_text_idx = File_id_core;
|
||||
public long Tid_text_max() {return tid_text_max;} private long tid_text_max = Heap_max_infinite;
|
||||
public void Init_by_files(Db_provider p, Xodb_file[] v) {
|
||||
public void Init_by_files(Db_conn p, Xodb_file[] v) {
|
||||
files_ary = v; files_ary_len = v.length;
|
||||
boolean category_provider_core_null = true;
|
||||
for (int i = 0; i < files_ary_len; i++) {
|
||||
Xodb_file file = files_ary[i];
|
||||
Io_url url = trg_dir.GenSubFil(file.Url_rel()); // relative name only
|
||||
file.Connect_(Db_conn_info_.sqlite_(url)).Url_(url);
|
||||
file.Connect_(Db_url_.sqlite_(url)).Url_(url);
|
||||
switch (file.Tid()) {
|
||||
case Xodb_file_tid.Tid_core : file.Provider_(p); Set_file_core(file); break;
|
||||
case Xodb_file_tid.Tid_category : if (category_provider_core_null) {Provider_ctg_(file); category_provider_core_null = false;} break;
|
||||
case Xodb_file_tid.Tid_wikidata : Provider_wdata_(file); break;
|
||||
case Xodb_file_tid.Tid_core : file.Conn_(p); Set_file_core(file); break;
|
||||
case Xodb_file_tid.Tid_category : if (category_provider_core_null) {Conn_ctg_(file); category_provider_core_null = false;} break;
|
||||
case Xodb_file_tid.Tid_wikidata : Conn_wdata_(file); break;
|
||||
case Xodb_file_tid.Tid_text : Set_file_text(file); break;
|
||||
}
|
||||
}
|
||||
@@ -61,7 +61,7 @@ public class Xodb_fsys_mgr {
|
||||
if (text_max > 0)
|
||||
Set_file_text(Make(Xodb_file_tid.Tid_text).File_max_(text_max));
|
||||
}
|
||||
private void Set_file_core(Xodb_file file) {provider_core = provider_page = provider_ctg = provider_wdata = file.Provider();}
|
||||
private void Set_file_core(Xodb_file file) {provider_core = provider_page = provider_ctg = provider_wdata = file.Conn();}
|
||||
private void Set_file_text(Xodb_file file) {tid_text_idx = file.Id(); tid_text_max = file.File_max();}
|
||||
public Io_url Get_url(byte file_tid) {
|
||||
Xodb_file file = Get_tid_root(file_tid);
|
||||
@@ -80,15 +80,15 @@ public class Xodb_fsys_mgr {
|
||||
for (int i = 0; i < files_ary_len; i++) {
|
||||
Xodb_file file = files_ary[i];
|
||||
if (Byte_.In(file.Tid(), tids))
|
||||
Sqlite_engine_.Idx_create(usr_dlg, file.Provider(), Int_.Xto_str(file.Id()), idxs);
|
||||
Sqlite_engine_.Idx_create(usr_dlg, file.Conn(), Int_.Xto_str(file.Id()), idxs);
|
||||
}
|
||||
}
|
||||
public Xodb_file Make(byte file_tid) {
|
||||
int file_idx = files_ary_len;
|
||||
Io_url url = Create_sqlite3(src_dir, trg_dir, wiki_name, file_idx);
|
||||
Xodb_file rv = Xodb_file.make_(file_idx, file_tid, url.NameAndExt()).Connect_(Db_conn_info_.sqlite_(url));
|
||||
Xodb_file rv = Xodb_file.make_(file_idx, file_tid, url.NameAndExt()).Connect_(Db_url_.sqlite_(url));
|
||||
rv.Url_(url);
|
||||
Xodb_xowa_cfg_tbl.Insert_str(rv.Provider(), Cfg_grp_db_meta, "type_name", Xodb_file_tid.Xto_key(file_tid));
|
||||
Xodb_xowa_cfg_tbl.Insert_str(rv.Conn(), Cfg_grp_db_meta, "type_name", Xodb_file_tid.Xto_key(file_tid));
|
||||
files_ary = (Xodb_file[])Array_.Resize(files_ary, files_ary_len + 1);
|
||||
files_ary[files_ary_len++] = rv;
|
||||
return rv;
|
||||
|
||||
@@ -56,20 +56,20 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr {
|
||||
public void Load_by_ids(Cancelable cancelable, ListAdp rv, int bgn, int end) {db_mgr.Tbl_page().Select_by_id_list(cancelable, false, rv, bgn, end);}
|
||||
public boolean Load_ctg_v1(Xoctg_view_ctg rv, byte[] ctg_bry) {
|
||||
int cat_page_id = db_mgr.Tbl_page().Select_id(Xow_ns_.Id_category, ctg_bry); if (cat_page_id == Xodb_mgr_sql.Page_id_null) return false;
|
||||
Xodb_category_itm ctg = db_mgr.Tbl_category().Select(fsys_mgr.Provider_ctg(), cat_page_id); if (ctg == Xodb_category_itm.Null) return false;
|
||||
Db_provider p = fsys_mgr.Get_by_idx(ctg.File_idx()).Provider();
|
||||
Xodb_category_itm ctg = db_mgr.Tbl_category().Select(fsys_mgr.Conn_ctg(), cat_page_id); if (ctg == Xodb_category_itm.Null) return false;
|
||||
Db_conn p = fsys_mgr.Get_by_idx(ctg.File_idx()).Conn();
|
||||
return db_mgr.Ctg_select_v1(rv, p, ctg);
|
||||
}
|
||||
public boolean Load_ctg_v2(Xoctg_data_ctg rv, byte[] ctg_bry) {throw Err_.not_implemented_();}
|
||||
public void Load_ctg_v2a(Xoctg_view_ctg rv, Xoctg_url ctg_url, byte[] ctg_ttl, int load_max) {
|
||||
int cat_page_id = db_mgr.Tbl_page().Select_id(Xow_ns_.Id_category, ctg_ttl); if (cat_page_id == Xodb_mgr_sql.Page_id_null) return;
|
||||
Xodb_category_itm ctg = db_mgr.Tbl_category().Select(fsys_mgr.Provider_ctg(), cat_page_id); if (ctg == Xodb_category_itm.Null) return;
|
||||
Db_provider p = fsys_mgr.Get_by_idx(ctg.File_idx()).Provider();
|
||||
Xodb_category_itm ctg = db_mgr.Tbl_category().Select(fsys_mgr.Conn_ctg(), cat_page_id); if (ctg == Xodb_category_itm.Null) return;
|
||||
Db_conn p = fsys_mgr.Get_by_idx(ctg.File_idx()).Conn();
|
||||
ListAdp list = ListAdp_.new_();
|
||||
Load_ctg_v2a_db_retrieve(rv, ctg_url, cat_page_id, load_max, p, list);
|
||||
Load_ctg_v2a_ui_sift(rv, ctg, list);
|
||||
}
|
||||
private void Load_ctg_v2a_db_retrieve(Xoctg_view_ctg rv, Xoctg_url ctg_url, int cat_page_id, int load_max, Db_provider p, ListAdp list) {
|
||||
private void Load_ctg_v2a_db_retrieve(Xoctg_view_ctg rv, Xoctg_url ctg_url, int cat_page_id, int load_max, Db_conn p, ListAdp list) {
|
||||
int len = Xoa_ctg_mgr.Tid__max;
|
||||
for (byte i = Xoa_ctg_mgr.Tid_subc; i < len; i++) {
|
||||
boolean arg_is_from = ctg_url.Grp_fwds()[i] == Bool_.N_byte;
|
||||
@@ -86,7 +86,7 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr {
|
||||
private void Load_ctg_v2a_ui_sift(Xoctg_view_ctg rv, Xodb_category_itm ctg, ListAdp list) {
|
||||
int len = list.Count();
|
||||
Xow_wiki wiki = this.db_mgr.Wiki();
|
||||
byte prv_tid = Byte_.MaxValue_127;
|
||||
byte prv_tid = Byte_.Max_value_127;
|
||||
Xoctg_view_grp view_grp = null;
|
||||
for (int i = 0; i < len; i++) {
|
||||
Xodb_page db_page = (Xodb_page)list.FetchAt(i);
|
||||
@@ -109,16 +109,16 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr {
|
||||
view_grp.Total_(ctg.Count_by_tid(i));
|
||||
}
|
||||
}
|
||||
private Db_provider search_provider = null;
|
||||
private Db_conn search_provider = null;
|
||||
private void Search_version_init() {
|
||||
if (search_provider == null) {
|
||||
Xodb_file search_file = db_mgr.Fsys_mgr().Get_tid_root(Xodb_file_tid.Tid_search);
|
||||
if (search_file == null) {
|
||||
search_provider = Db_provider_.Null;
|
||||
search_provider = Db_conn_.Null;
|
||||
search_version = gplx.xowa.specials.search.Xosrh_core.Version_1;
|
||||
}
|
||||
else {
|
||||
search_provider = search_file.Provider();
|
||||
search_provider = search_file.Conn();
|
||||
search_version = gplx.xowa.specials.search.Xosrh_core.Version_2;
|
||||
}
|
||||
}
|
||||
@@ -128,7 +128,7 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr {
|
||||
if (search_version == gplx.xowa.specials.search.Xosrh_core.Version_1)
|
||||
db_mgr.Tbl_page().Select_by_search(cancelable, rv, search, results_max);
|
||||
else {
|
||||
Xodb_search_title_word_tbl.Select_by_word(cancelable, rv, db_mgr.Db_ctx(), search, results_max, db_mgr.Fsys_mgr().Get_tid_root(Xodb_file_tid.Tid_search).Provider());
|
||||
Xodb_search_title_word_tbl.Select_by_word(cancelable, rv, db_mgr.Db_ctx(), search, results_max, db_mgr.Fsys_mgr().Get_tid_root(Xodb_file_tid.Tid_search).Conn());
|
||||
db_mgr.Tbl_page().Select_by_id_list(cancelable, true, rv);
|
||||
}
|
||||
}
|
||||
@@ -141,10 +141,10 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr {
|
||||
public int Load_ctg_count(byte[] ttl) {
|
||||
int page_id = db_mgr.Tbl_page().Select_id(Xow_ns_.Id_category, ttl);
|
||||
if (page_id == Xodb_mgr_sql.Page_id_null) return 0; // title not found; return 0;
|
||||
return db_mgr.Tbl_category().Select(fsys_mgr.Provider_ctg(), page_id).Count_all();
|
||||
return db_mgr.Tbl_category().Select(fsys_mgr.Conn_ctg(), page_id).Count_all();
|
||||
}
|
||||
public byte[] Load_qid(byte[] wiki_alias, byte[] ns_num, byte[] ttl) {return db_mgr.Tbl_wdata_qids().Select_qid(fsys_mgr.Provider_wdata(), wiki_alias, ns_num, ttl);}
|
||||
public int Load_pid(byte[] lang_key, byte[] pid_name) {return db_mgr.Tbl_wdata_pids().Select_pid(fsys_mgr.Provider_wdata(), lang_key, pid_name);}
|
||||
public byte[] Load_qid(byte[] wiki_alias, byte[] ns_num, byte[] ttl) {return db_mgr.Tbl_wdata_qids().Select_qid(fsys_mgr.Conn_wdata(), wiki_alias, ns_num, ttl);}
|
||||
public int Load_pid(byte[] lang_key, byte[] pid_name) {return db_mgr.Tbl_wdata_pids().Select_pid(fsys_mgr.Conn_wdata(), lang_key, pid_name);}
|
||||
public byte[] Find_random_ttl(Xow_ns ns) {return db_mgr.Tbl_page().Select_random(ns);}
|
||||
public void Clear() {}
|
||||
public Xodb_page[] Load_ctg_list(byte[][] ctg_ttls) {
|
||||
@@ -166,7 +166,7 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr {
|
||||
hash2.Add(page.Id_val(), page);
|
||||
}
|
||||
len = hash2.Count(); // must update len (!hash2.Has() may have skipped titles)
|
||||
db_mgr.Tbl_category().Select_by_cat_id_in(Cancelable_.Never, hash2, fsys_mgr.Provider_ctg(), db_mgr.Db_ctx(), 0, len);
|
||||
db_mgr.Tbl_category().Select_by_cat_id_in(Cancelable_.Never, hash2, fsys_mgr.Conn_ctg(), db_mgr.Db_ctx(), 0, len);
|
||||
return (Xodb_page[])hash.Xto_ary(Xodb_page.class);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ class Xodb_load_mgr_sql_fxt {
|
||||
public void Init_save_ctgs(Xodb_page[] ary) {
|
||||
int len = ary.length;
|
||||
Xodb_mgr_sql db_mgr = wiki.Db_mgr_as_sql();
|
||||
Db_provider p = db_mgr.Fsys_mgr().Provider_core();
|
||||
Db_conn p = db_mgr.Fsys_mgr().Conn_core();
|
||||
p.Txn_mgr().Txn_bgn_if_none();
|
||||
Db_stmt page_stmt = db_mgr.Tbl_page().Insert_stmt(p);
|
||||
Db_stmt category_stmt = db_mgr.Tbl_category().Insert_stmt(p);
|
||||
@@ -98,7 +98,7 @@ class Xodb_load_mgr_sql_fxt {
|
||||
public Xodb_load_mgr_sql_fxt Init_limit_(int v) {limit = v; return this;} private int limit = 3;
|
||||
// public void Init_ctg_insert(Xoctg_mok_ctg ctg) {
|
||||
// Xodb_mgr_sql db_mgr = wiki.Db_mgr_as_sql();
|
||||
// Db_provider p = db_mgr.Fsys_mgr().Core_provider();
|
||||
// Db_conn p = db_mgr.Fsys_mgr().Core_provider();
|
||||
// p.Txn_mgr().Txn_bgn_if_none();
|
||||
// Xodb_categorylinks_tbl ctg_tbl = db_mgr.Tbl_categorylinks();
|
||||
// Db_stmt ctg_stmt = ctg_tbl.Insert_stmt(p);
|
||||
|
||||
@@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*;
|
||||
import gplx.dbs.*;
|
||||
import gplx.xowa.apps.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.ctgs.*; import gplx.xowa.hdumps.*;
|
||||
import gplx.xowa2.wikis.data.tbls.*;
|
||||
public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble {
|
||||
private boolean html_db_enabled;
|
||||
public Xodb_mgr_sql(Xow_wiki wiki) {
|
||||
@@ -49,7 +50,7 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble {
|
||||
public Xodb_save_mgr Save_mgr() {return save_mgr;} private Xodb_save_mgr_sql save_mgr;
|
||||
public Xodb_hdump_mgr Hdump_mgr() {return hdump_mgr;} private Xodb_hdump_mgr hdump_mgr;
|
||||
public Xodb_xowa_cfg_tbl Tbl_xowa_cfg() {return tbl_cfg;} private Xodb_xowa_cfg_tbl tbl_cfg = new Xodb_xowa_cfg_tbl();
|
||||
public Xodb_xowa_ns_tbl Tbl_xowa_ns() {return tbl_ns;} private Xodb_xowa_ns_tbl tbl_ns = new Xodb_xowa_ns_tbl();
|
||||
public Xodata_ns_regy_tbl Tbl_xowa_ns() {return tbl_ns;} private Xodata_ns_regy_tbl tbl_ns = new Xodata_ns_regy_tbl();
|
||||
public Xodb_xowa_db_tbl Tbl_xowa_db() {return tbl_db;} private Xodb_xowa_db_tbl tbl_db = new Xodb_xowa_db_tbl();
|
||||
public Xodb_page_tbl Tbl_page() {return tbl_page;} private Xodb_page_tbl tbl_page;
|
||||
public Xodb_text_tbl Tbl_text() {return tbl_text;} private Xodb_text_tbl tbl_text;
|
||||
@@ -71,22 +72,22 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble {
|
||||
Xoi_dump_mgr dump_mgr = wiki.App().Setup_mgr().Dump_mgr();
|
||||
data_storage_format = dump_mgr.Data_storage_format();
|
||||
fsys_mgr.Init_by_ns_map(wiki.Ns_mgr(), ns_map, dump_mgr.Db_text_max());
|
||||
Core_provider_(fsys_mgr.Provider_core());
|
||||
Core_provider_(fsys_mgr.Conn_core());
|
||||
state = State_make;
|
||||
}
|
||||
public void Init_load(Db_conn_info connect) {
|
||||
Db_provider provider = Db_provider_pool._.Get_or_new(connect);
|
||||
Xodb_file[] files = tbl_db.Select_all(provider);
|
||||
fsys_mgr.Init_by_files(provider, files);
|
||||
Core_provider_(provider);
|
||||
public void Init_load(Db_url connect) {
|
||||
Db_conn conn = Db_conn_pool_old._.Get_or_new(connect);
|
||||
Xodb_file[] files = tbl_db.Select_all(conn);
|
||||
fsys_mgr.Init_by_files(conn, files);
|
||||
Core_provider_(conn);
|
||||
state = State_load;
|
||||
}
|
||||
private void Core_provider_(Db_provider provider) {
|
||||
tbl_cfg.Provider_(provider);
|
||||
tbl_ns.Provider_(provider);
|
||||
tbl_db.Provider_(provider);
|
||||
tbl_page.Provider_(provider);
|
||||
tbl_site_stats.Provider_(provider);
|
||||
private void Core_provider_(Db_conn conn) {
|
||||
tbl_cfg.Conn_(conn);
|
||||
tbl_ns.Conn_(conn);
|
||||
tbl_db.Conn_(conn);
|
||||
tbl_page.Conn_(conn);
|
||||
tbl_site_stats.Conn_(conn);
|
||||
}
|
||||
public void Page_create(Db_stmt page_stmt, Db_stmt text_stmt, int page_id, int ns_id, byte[] ttl_wo_ns, boolean redirect, DateAdp modified_on, byte[] text, int random_int, int file_idx) {
|
||||
int text_len = text.length;
|
||||
@@ -94,7 +95,7 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble {
|
||||
tbl_page.Insert(page_stmt, page_id, ns_id, ttl_wo_ns, redirect, modified_on, text_len, random_int, file_idx, html_db_id);
|
||||
tbl_text.Insert(text_stmt, page_id, text, data_storage_format);
|
||||
}
|
||||
public boolean Ctg_select_v1(Xoctg_view_ctg view_ctg, Db_provider ctg_provider, Xodb_category_itm ctg) {
|
||||
public boolean Ctg_select_v1(Xoctg_view_ctg view_ctg, Db_conn ctg_provider, Xodb_category_itm ctg) {
|
||||
Db_qry_select qry = Db_qry_.select_().Cols_(Xodb_categorylinks_tbl.Fld_cl_from)
|
||||
.From_(Xodb_categorylinks_tbl.Tbl_name)
|
||||
.Where_(Db_crt_.eq_(Xodb_categorylinks_tbl.Fld_cl_to_id, ctg.Id()))
|
||||
@@ -167,12 +168,12 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble {
|
||||
Xodb_file file = ary[i] ;
|
||||
if (file.Tid() != tid) continue;
|
||||
file.Rls();
|
||||
gplx.dbs.Db_conn_info__sqlite sqlite = (gplx.dbs.Db_conn_info__sqlite)file.Connect();
|
||||
gplx.dbs.Db_url__sqlite sqlite = (gplx.dbs.Db_url__sqlite)file.Connect();
|
||||
Io_mgr._.DeleteFil_args(sqlite.Url()).MissingFails_off().Exec();
|
||||
file.Cmd_mode_(Db_cmd_mode.Delete);
|
||||
}
|
||||
tbl_db.Commit_all(fsys_mgr.Provider_core(), ary);
|
||||
this.Init_load(fsys_mgr.Provider_core().Conn_info());
|
||||
tbl_db.Commit_all(fsys_mgr.Conn_core(), ary);
|
||||
this.Init_load(fsys_mgr.Conn_core().Url());
|
||||
}
|
||||
|
||||
public static final String Grp_wiki_init = "wiki.init";
|
||||
@@ -195,7 +196,7 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble {
|
||||
Xodb_mgr_sql rv = db_mgr.Tid() == Xodb_mgr_txt.Tid_txt ? wiki.Db_mgr_create_as_sql() : wiki.Db_mgr_as_sql();
|
||||
byte state = rv.State();
|
||||
switch (state) {
|
||||
case Xodb_mgr_sql.State_init: rv.Init_load(Db_conn_info_.sqlite_(Xodb_mgr_sql.Find_core_url(wiki))); break; // load
|
||||
case Xodb_mgr_sql.State_init: rv.Init_load(Db_url_.sqlite_(Xodb_mgr_sql.Find_core_url(wiki))); break; // load
|
||||
case Xodb_mgr_sql.State_make: break; // noop; being made; don't load from db;
|
||||
case Xodb_mgr_sql.State_load: break; // noop; already loaded;
|
||||
default: throw Err_.unhandled(state);
|
||||
|
||||
@@ -30,7 +30,7 @@ public class Xodb_save_mgr_sql implements Xodb_save_mgr {
|
||||
String page_id = db_mgr.Tbl_xowa_cfg().Select_val_or("db", "page.id_nxt", null);
|
||||
int page_id_int = -1;
|
||||
if (page_id == null) {
|
||||
DataRdr rdr = db_mgr.Tbl_page().Provider().Exec_sql_as_rdr("SELECT (Max(page_id) + 1) AS max_page_id FROM page;");
|
||||
DataRdr rdr = db_mgr.Tbl_page().Conn().Exec_sql_as_rdr("SELECT (Max(page_id) + 1) AS max_page_id FROM page;");
|
||||
if (rdr.MoveNextPeer()) {
|
||||
page_id = Int_.Xto_str(rdr.ReadInt("max_page_id"));
|
||||
page_id_int = Int_.parse_(page_id);
|
||||
@@ -44,8 +44,8 @@ public class Xodb_save_mgr_sql implements Xodb_save_mgr {
|
||||
Xodb_fsys_mgr fsys_mgr = db_mgr.Fsys_mgr();
|
||||
int file_idx = fsys_mgr.Tid_text_idx();
|
||||
boolean redirect = db_mgr.Wiki().Redirect_mgr().Is_redirect(text, text.length);
|
||||
Db_stmt page_stmt = db_mgr.Tbl_page().Insert_stmt(fsys_mgr.Provider_page());
|
||||
Db_provider text_provider = db_mgr.Fsys_mgr().Get_by_idx(file_idx).Provider();
|
||||
Db_stmt page_stmt = db_mgr.Tbl_page().Insert_stmt(fsys_mgr.Conn_page());
|
||||
Db_conn text_provider = db_mgr.Fsys_mgr().Get_by_idx(file_idx).Conn();
|
||||
Db_stmt text_stmt = db_mgr.Tbl_text().Insert_stmt(text_provider);
|
||||
text = zip_mgr.Zip(db_mgr.Data_storage_format(), text);
|
||||
try {
|
||||
@@ -72,10 +72,10 @@ public class Xodb_save_mgr_sql implements Xodb_save_mgr {
|
||||
if (redirect_changed) kv_ary[kv_idx++] = KeyVal_.new_("page_is_redirect", redirect_changed);
|
||||
if (modified_changed) kv_ary[kv_idx++] = KeyVal_.new_("page_touched", Xto_touched_str(modified));
|
||||
qry = Db_qry_.update_common_("page", Db_crt_.eq_("page_id", page.Revision_data().Id()), kv_ary);
|
||||
Db_provider provider = db_mgr.Fsys_mgr().Provider_core();
|
||||
provider.Txn_mgr().Txn_bgn_if_none();
|
||||
provider.Exec_qry(qry);
|
||||
provider.Txn_mgr().Txn_end_all();
|
||||
Db_conn conn = db_mgr.Fsys_mgr().Conn_core();
|
||||
conn.Txn_mgr().Txn_bgn_if_none();
|
||||
conn.Exec_qry(qry);
|
||||
conn.Txn_mgr().Txn_end_all();
|
||||
}
|
||||
Xodb_page db_page = new Xodb_page();
|
||||
db_mgr.Load_mgr().Load_by_id(db_page, page.Revision_data().Id());
|
||||
@@ -88,12 +88,12 @@ public class Xodb_save_mgr_sql implements Xodb_save_mgr {
|
||||
, KeyVal_.new_("page_title", String_.new_utf8_(trg_ttl))
|
||||
);
|
||||
try {
|
||||
db_mgr.Fsys_mgr().Provider_core().Exec_qry(qry);
|
||||
db_mgr.Fsys_mgr().Conn_core().Exec_qry(qry);
|
||||
} catch (Exception exc) {
|
||||
if (String_.Has(Err_.Message_gplx_brief(exc), "columns page_namespace, page_random_int are not unique")) { // HACK: terrible hack, but moving pages across ns will break UNIQUE index
|
||||
db_mgr.Fsys_mgr().Provider_core().Exec_sql("DROP INDEX page__name_random;"); // is UNIQUE by default
|
||||
db_mgr.Fsys_mgr().Provider_core().Exec_sql("CREATE INDEX page__name_random ON page (page_namespace, page_random_int);");
|
||||
db_mgr.Fsys_mgr().Provider_core().Exec_qry(qry);
|
||||
db_mgr.Fsys_mgr().Conn_core().Exec_sql("DROP INDEX page__name_random;"); // is UNIQUE by default
|
||||
db_mgr.Fsys_mgr().Conn_core().Exec_sql("CREATE INDEX page__name_random ON page (page_namespace, page_random_int);");
|
||||
db_mgr.Fsys_mgr().Conn_core().Exec_qry(qry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,11 +31,11 @@ class Xodb_upgrade_mgr {
|
||||
}
|
||||
// class Xodb_upgrade_mgr_v0_6_2_0 {
|
||||
// public static void Upgrade(Xodb_mgr_sql db_mgr, KeyVal[] kv_ary) {
|
||||
// Db_provider p = db_mgr.Fsys_mgr().Core_provider();
|
||||
// Db_conn p = db_mgr.Fsys_mgr().Core_provider();
|
||||
// Fix_storage_format(p, db_mgr, kv_ary);
|
||||
// Fix_category_version(p, db_mgr);
|
||||
// }
|
||||
// private static void Fix_storage_format(Db_provider p, Xodb_mgr_sql db_mgr, KeyVal[] kv_ary) { // storage_format saved incorrectly as int
|
||||
// private static void Fix_storage_format(Db_conn p, Xodb_mgr_sql db_mgr, KeyVal[] kv_ary) { // storage_format saved incorrectly as int
|
||||
// int len = kv_ary.length;
|
||||
// String gfs_data_storage_format = Xoa_gfs_mgr.Build_code(Xow_wiki.Invk_db_mgr, Xodb_mgr_sql.Invk_data_storage_format);
|
||||
// for (int i = 0; i < len; i++) {
|
||||
@@ -50,7 +50,7 @@ class Xodb_upgrade_mgr {
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// private static void Fix_category_version(Db_provider p, Xodb_mgr_sql db_mgr) {
|
||||
// private static void Fix_category_version(Db_conn p, Xodb_mgr_sql db_mgr) {
|
||||
// Db_qry qry = Db_qry_.select_().From_(Xodb_categorylinks_tbl.Tbl_name).Cols_(Xodb_categorylinks_tbl.Fld_cl_type_id).Where_(Db_crt_.eq_(Xodb_categorylinks_tbl.Fld_cl_type_id, ));
|
||||
// Db_stmt stmt = Db_stmt_.Null;
|
||||
// DataRdr rdr = DataRdr_.Null;
|
||||
|
||||
@@ -18,32 +18,32 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*;
|
||||
import gplx.dbs.*;
|
||||
public class Xodb_category_tbl {
|
||||
public Db_stmt Update_stmt(Db_provider p) {return Db_stmt_.new_update_(p, Tbl_name, String_.Ary(Fld_cat_id), Fld_cat_hidden);}
|
||||
public Db_stmt Update_stmt(Db_conn p) {return Db_stmt_.new_update_(p, Tbl_name, String_.Ary(Fld_cat_id), Fld_cat_hidden);}
|
||||
public void Update(Db_stmt stmt, int cat_id, byte cat_hidden) {
|
||||
stmt.Clear()
|
||||
.Val_byte_(cat_hidden)
|
||||
.Val_int_(cat_id)
|
||||
.Val_byte(cat_hidden)
|
||||
.Val_int(cat_id)
|
||||
.Exec_update()
|
||||
;
|
||||
}
|
||||
public Db_stmt Insert_stmt(Db_provider p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_cat_id, Fld_cat_pages, Fld_cat_subcats, Fld_cat_files, Fld_cat_hidden, Fld_cat_file_idx);}
|
||||
public Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_cat_id, Fld_cat_pages, Fld_cat_subcats, Fld_cat_files, Fld_cat_hidden, Fld_cat_file_idx);}
|
||||
public void Insert(Db_stmt stmt, int cat_id, int cat_pages, int cat_subcats, int cat_files, byte cat_hidden, int cat_file_idx) {
|
||||
stmt.Clear()
|
||||
.Val_int_(cat_id)
|
||||
.Val_int_(cat_pages)
|
||||
.Val_int_(cat_subcats)
|
||||
.Val_int_(cat_files)
|
||||
.Val_byte_(cat_hidden)
|
||||
.Val_int_(cat_file_idx)
|
||||
.Val_int(cat_id)
|
||||
.Val_int(cat_pages)
|
||||
.Val_int(cat_subcats)
|
||||
.Val_int(cat_files)
|
||||
.Val_byte(cat_hidden)
|
||||
.Val_int(cat_file_idx)
|
||||
.Exec_insert()
|
||||
;
|
||||
}
|
||||
public Xodb_category_itm Select(Db_provider p, int cat_page_id) {
|
||||
public Xodb_category_itm Select(Db_conn p, int cat_page_id) {
|
||||
Db_stmt stmt = Db_stmt_.Null;
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
try {
|
||||
stmt = Db_stmt_.new_select_(p, Tbl_name, String_.Ary(Fld_cat_id));
|
||||
rdr = stmt.Val_int_(cat_page_id).Exec_select();
|
||||
rdr = stmt.Val_int(cat_page_id).Exec_select();
|
||||
if (rdr.MoveNextPeer()) {
|
||||
return Xodb_category_itm.load_
|
||||
( cat_page_id
|
||||
@@ -57,7 +57,7 @@ public class Xodb_category_tbl {
|
||||
} finally {stmt.Rls(); rdr.Rls();}
|
||||
return Xodb_category_itm.Null;
|
||||
}
|
||||
public void Select_by_cat_id_in(Cancelable cancelable, OrderedHash rv, Db_provider p, Xodb_ctx db_ctx, int bgn, int end) {
|
||||
public void Select_by_cat_id_in(Cancelable cancelable, OrderedHash rv, Db_conn p, Xodb_ctx db_ctx, int bgn, int end) {
|
||||
Xodb_in_wkr_category_id wkr = new Xodb_in_wkr_category_id();
|
||||
wkr.Init(rv);
|
||||
wkr.Select_in(p, cancelable, db_ctx, bgn, end);
|
||||
|
||||
@@ -18,15 +18,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*;
|
||||
import gplx.dbs.*; import gplx.xowa.ctgs.*;
|
||||
public class Xodb_categorylinks_tbl {
|
||||
public void Delete_all(Db_provider p) {p.Exec_qry(Db_qry_.delete_tbl_(Tbl_name));}
|
||||
public Db_stmt Insert_stmt(Db_provider p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_cl_from, Fld_cl_to_id, Fld_cl_sortkey, Fld_cl_timestamp, Fld_cl_type_id);}
|
||||
public void Delete_all(Db_conn p) {p.Exec_qry(Db_qry_.delete_tbl_(Tbl_name));}
|
||||
public Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_cl_from, Fld_cl_to_id, Fld_cl_sortkey, Fld_cl_timestamp, Fld_cl_type_id);}
|
||||
public void Insert(Db_stmt stmt, int page_id, int ctg_page_id, byte[] sortkey, int timestamp, byte ctg_tid) {
|
||||
stmt.Clear()
|
||||
.Val_int_(page_id)
|
||||
.Val_int_(ctg_page_id)
|
||||
.Val_str_(String_.new_utf8_(sortkey))
|
||||
.Val_int_(timestamp)
|
||||
.Val_byte_(ctg_tid)
|
||||
.Val_int(page_id)
|
||||
.Val_int(ctg_page_id)
|
||||
.Val_str(String_.new_utf8_(sortkey))
|
||||
.Val_int(timestamp)
|
||||
.Val_byte(ctg_tid)
|
||||
.Exec_insert()
|
||||
;
|
||||
}
|
||||
@@ -38,7 +38,7 @@ public class Xodb_categorylinks_tbl {
|
||||
}
|
||||
return ctg_grp;
|
||||
}
|
||||
public int Select_by_type(Db_provider p, ListAdp list, int cat_page_id, byte arg_tid, byte[] arg_sortkey, boolean arg_is_from, int limit) {
|
||||
public int Select_by_type(Db_conn p, ListAdp list, int cat_page_id, byte arg_tid, byte[] arg_sortkey, boolean arg_is_from, int limit) {
|
||||
String arg_sortkey_str = arg_sortkey == null ? "" : String_.new_utf8_(arg_sortkey);
|
||||
gplx.criterias.Criteria comp_crt = !arg_is_from
|
||||
? Db_crt_.mte_(Fld_cl_sortkey, arg_sortkey_str) // from: sortkey >= 'val'
|
||||
@@ -51,8 +51,8 @@ public class Xodb_categorylinks_tbl {
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
int count = 0;
|
||||
try {
|
||||
stmt = p.Prepare(qry);
|
||||
rdr = stmt.Val_int_(cat_page_id).Val_byte_(arg_tid).Val_str_(arg_sortkey_str).Exec_select();
|
||||
stmt = p.New_stmt(qry);
|
||||
rdr = stmt.Val_int(cat_page_id).Val_byte(arg_tid).Val_str(arg_sortkey_str).Exec_select();
|
||||
while (rdr.MoveNextPeer()) {
|
||||
int itm_page_id = rdr.ReadInt(Fld_cl_from);
|
||||
byte[] itm_sortkey = rdr.ReadBryByStr(Fld_cl_sortkey);
|
||||
|
||||
@@ -22,7 +22,7 @@ public abstract class Xodb_in_wkr_base {
|
||||
public abstract void Fill_stmt(Db_stmt stmt, int bgn, int end);
|
||||
public abstract Db_qry Build_qry(Xodb_ctx tbl_ctx, int bgn, int end);
|
||||
public abstract void Eval_rslts(Cancelable cancelable, Xodb_ctx db_ctx, DataRdr rdr);
|
||||
public void Select_in(Db_provider provider, Cancelable cancelable, Xodb_ctx db_ctx, int full_bgn, int full_end) {
|
||||
public void Select_in(Db_conn conn, Cancelable cancelable, Xodb_ctx db_ctx, int full_bgn, int full_end) {
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
Db_stmt stmt = Db_stmt_.Null;
|
||||
int interval = Interval();
|
||||
@@ -30,7 +30,7 @@ public abstract class Xodb_in_wkr_base {
|
||||
int part_end = i + interval;
|
||||
if (part_end > full_end) part_end = full_end;
|
||||
try {
|
||||
stmt = provider.Prepare(Build_qry(db_ctx, i, part_end));
|
||||
stmt = conn.New_stmt(Build_qry(db_ctx, i, part_end));
|
||||
Fill_stmt(stmt, i, part_end);
|
||||
rdr = stmt.Exec_select();
|
||||
Eval_rslts(cancelable, db_ctx, rdr);
|
||||
|
||||
@@ -29,7 +29,7 @@ class Xodb_in_wkr_page_id extends Xodb_in_wkr_page_base {
|
||||
@Override public void Fill_stmt(Db_stmt stmt, int bgn, int end) {
|
||||
for (int i = bgn; i < end; i++) {
|
||||
Xodb_page page = (Xodb_page)list.FetchAt(i);
|
||||
stmt.Val_int_(page.Id());
|
||||
stmt.Val_int(page.Id());
|
||||
}
|
||||
}
|
||||
@Override public Xodb_page Eval_rslts_key(Xodb_page rdr_page) {return (Xodb_page)hash.Fetch(rdr_page.Id_val());}
|
||||
@@ -50,8 +50,8 @@ class Xodb_in_wkr_page_title extends Xodb_in_wkr_page_base {
|
||||
@Override public void Fill_stmt(Db_stmt stmt, int bgn, int end) {
|
||||
for (int i = bgn; i < end; i++) {
|
||||
Xodb_page page = (Xodb_page)hash.FetchAt(i);
|
||||
stmt.Val_int_(in_ns);
|
||||
stmt.Val_str_by_bry_(page.Ttl_wo_ns());
|
||||
stmt.Val_int(in_ns);
|
||||
stmt.Val_bry_as_str(page.Ttl_wo_ns());
|
||||
}
|
||||
}
|
||||
@Override public Xodb_page Eval_rslts_key(Xodb_page rdr_page) {return (Xodb_page)hash.Fetch(rdr_page.Ttl_wo_ns());}
|
||||
@@ -72,8 +72,8 @@ class Xodb_in_wkr_page_title_ns extends Xodb_in_wkr_page_base {
|
||||
@Override public void Fill_stmt(Db_stmt stmt, int bgn, int end) {
|
||||
for (int i = bgn; i < end; i++) {
|
||||
Xodb_page page = (Xodb_page)hash.FetchAt(i);
|
||||
stmt.Val_int_(page.Ns_id());
|
||||
stmt.Val_str_by_bry_(page.Ttl_wo_ns());
|
||||
stmt.Val_int(page.Ns_id());
|
||||
stmt.Val_bry_as_str(page.Ttl_wo_ns());
|
||||
}
|
||||
}
|
||||
@Override public Xodb_page Eval_rslts_key(Xodb_page rdr_page) {
|
||||
@@ -131,7 +131,7 @@ class Xodb_in_wkr_category_id extends Xodb_in_wkr_base {
|
||||
@Override public void Fill_stmt(Db_stmt stmt, int bgn, int end) {
|
||||
for (int i = bgn; i < end; i++) {
|
||||
Xodb_page page = (Xodb_page)hash.FetchAt(i);
|
||||
stmt.Val_int_(page.Id());
|
||||
stmt.Val_int(page.Id());
|
||||
}
|
||||
}
|
||||
@Override public void Eval_rslts(Cancelable cancelable, Xodb_ctx db_ctx, DataRdr rdr) {
|
||||
|
||||
@@ -29,8 +29,8 @@ public class Xodb_page_tbl {
|
||||
// Db_rdr rdr = Db_rdr_.Null;
|
||||
// Db_stmt stmt = Db_stmt_.Null;
|
||||
// try {
|
||||
// stmt = Db_stmt_.new_select_as_rdr(provider, Db_qry__select_in_tbl.new_(Tbl_name, String_.Ary(Fld_page_id), html_db_enabled ? Select_by_id_flds__hdump : Select_by_id_flds__basic));
|
||||
// rdr = stmt.Val_int_(page_id).Exec_select_as_rdr();
|
||||
// stmt = Db_stmt_.new_select_as_rdr(conn, Db_qry__select_in_tbl.new_(Tbl_name, String_.Ary(Fld_page_id), html_db_enabled ? Select_by_id_flds__hdump : Select_by_id_flds__basic));
|
||||
// rdr = stmt.Val_int(page_id).Exec_select_as_rdr();
|
||||
// while (rdr.Move_next()) {
|
||||
// Read_page__all2(rv, rdr, html_db_enabled);
|
||||
// return true;
|
||||
@@ -44,17 +44,17 @@ public class Xodb_page_tbl {
|
||||
this.db_ctx = wiki.Db_mgr().Db_ctx();
|
||||
}
|
||||
public void Html_db_enabled_(boolean v) {html_db_enabled = v;} private boolean html_db_enabled;
|
||||
public Db_provider Provider() {return provider;} public void Provider_(Db_provider provider) {this.provider = provider;} private Db_provider provider;
|
||||
public Db_conn Conn() {return conn;} public void Conn_(Db_conn conn) {this.conn = conn;} private Db_conn conn;
|
||||
public boolean Select_by_ttl(Xodb_page rv, Xow_ns ns, byte[] ttl) {
|
||||
Db_rdr rdr = Db_rdr_.Null; Db_stmt stmt = Db_stmt_.Null;
|
||||
try {
|
||||
stmt = Db_stmt_.new_select_as_rdr(provider, Db_qry__select_in_tbl.new_(Tbl_name, String_.Ary(Fld_page_ns, Fld_page_title), html_db_enabled ? Select_by_id_flds__hdump : Select_by_id_flds__basic));
|
||||
rdr = stmt.Val_int_(ns.Id()).Val_str_(String_.new_utf8_(ttl)).Exec_select_as_rdr();
|
||||
stmt = Db_stmt_.new_select_as_rdr(conn, Db_qry__select_in_tbl.new_(Tbl_name, String_.Ary(Fld_page_ns, Fld_page_title), html_db_enabled ? Select_by_id_flds__hdump : Select_by_id_flds__basic));
|
||||
rdr = stmt.Val_int(ns.Id()).Val_str(String_.new_utf8_(ttl)).Exec_select_as_rdr();
|
||||
if (rdr.Move_next()) {
|
||||
Read_page__all2(rv, rdr, html_db_enabled);
|
||||
return true;
|
||||
}
|
||||
} finally {rdr.Close(); stmt.Rls();}
|
||||
} finally {rdr.Rls(); stmt.Rls();}
|
||||
return false;
|
||||
}
|
||||
public static void Read_page__all2(Xodb_page page, Db_rdr rdr, boolean html_db_enabled) {
|
||||
@@ -74,9 +74,9 @@ public class Xodb_page_tbl {
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
Db_stmt stmt = Db_stmt_.Null;
|
||||
try {
|
||||
stmt = Db_stmt_.new_select_(provider, Tbl_name, String_.Ary(Fld_page_id));
|
||||
stmt = Db_stmt_.new_select_(conn, Tbl_name, String_.Ary(Fld_page_id));
|
||||
rdr = stmt
|
||||
.Val_int_(page_id)
|
||||
.Val_int(page_id)
|
||||
.Exec_select();
|
||||
while (rdr.MoveNextPeer()) {
|
||||
Read_page__all(rv, rdr, html_db_enabled);
|
||||
@@ -85,32 +85,32 @@ public class Xodb_page_tbl {
|
||||
} finally {rdr.Rls(); stmt.Rls();}
|
||||
return false;
|
||||
}
|
||||
public void Delete_all() {provider.Exec_qry(Db_qry_.delete_tbl_(Tbl_name));}
|
||||
public Db_stmt Insert_stmt(Db_provider p) {
|
||||
public void Delete_all() {conn.Exec_qry(Db_qry_.delete_tbl_(Tbl_name));}
|
||||
public Db_stmt Insert_stmt(Db_conn p) {
|
||||
return Db_stmt_.new_insert_(p, Tbl_name, html_db_enabled ? Flds_insert__html_y : Flds_insert__html_n);
|
||||
}
|
||||
public void Insert(Db_stmt stmt, int page_id, int ns_id, byte[] ttl_wo_ns, boolean redirect, DateAdp modified_on, int page_len, int random_int, int file_idx, int html_db_id) {
|
||||
stmt.Clear()
|
||||
.Val_int_(page_id)
|
||||
.Val_int_(ns_id)
|
||||
.Val_str_(String_.new_utf8_(ttl_wo_ns))
|
||||
.Val_byte_((byte)(redirect ? 1 : 0))
|
||||
.Val_str_(Xto_touched_str(modified_on))
|
||||
.Val_int_(page_len)
|
||||
.Val_int_(random_int)
|
||||
.Val_int_(file_idx);
|
||||
.Val_int(page_id)
|
||||
.Val_int(ns_id)
|
||||
.Val_str(String_.new_utf8_(ttl_wo_ns))
|
||||
.Val_byte((byte)(redirect ? 1 : 0))
|
||||
.Val_str(Xto_touched_str(modified_on))
|
||||
.Val_int(page_len)
|
||||
.Val_int(random_int)
|
||||
.Val_int(file_idx);
|
||||
if (html_db_enabled)
|
||||
stmt.Val_int_(html_db_id);
|
||||
stmt.Val_int(html_db_id);
|
||||
stmt.Exec_insert();
|
||||
}
|
||||
public int Select_id(int ns_id, byte[] ttl) {
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
Db_stmt stmt = Db_stmt_.Null;
|
||||
try {
|
||||
stmt = Db_stmt_.new_select_(provider, Tbl_name, String_.Ary(Fld_page_ns, Fld_page_title), Fld_page_id);
|
||||
stmt = Db_stmt_.new_select_(conn, Tbl_name, String_.Ary(Fld_page_ns, Fld_page_title), Fld_page_id);
|
||||
rdr = stmt
|
||||
.Val_int_(ns_id)
|
||||
.Val_str_by_bry_(ttl)
|
||||
.Val_int(ns_id)
|
||||
.Val_bry_as_str(ttl)
|
||||
.Exec_select();
|
||||
while (rdr.MoveNextPeer()) {
|
||||
return rdr.ReadInt(Fld_page_id);
|
||||
@@ -118,7 +118,7 @@ public class Xodb_page_tbl {
|
||||
} finally {rdr.Rls(); stmt.Rls();}
|
||||
return Xodb_mgr_sql.Page_id_null;
|
||||
}
|
||||
public DataRdr Select_all(Db_provider p) {
|
||||
public DataRdr Select_all(Db_conn p) {
|
||||
Db_qry_select qry = Db_qry_select.new_().From_(Tbl_name).Cols_(Fld_page_id, Fld_page_title).OrderBy_asc_(Fld_page_id);
|
||||
return p.Exec_qry_as_rdr(qry);
|
||||
}
|
||||
@@ -130,7 +130,7 @@ public class Xodb_page_tbl {
|
||||
String[] cols = search_suggest ? Flds_select_idx : html_db_enabled ? Flds_select_all__html_y : Flds_select_all__html_n;
|
||||
int limit = fwd ? max_results + 1 : max_results; // + 1 to get next item
|
||||
Db_qry_select select = Db_qry_.select_cols_(Tbl_name, crt, cols).Limit_(limit).OrderBy_(Fld_page_title, fwd);
|
||||
return select.Exec_qry_as_rdr(provider);
|
||||
return select.Exec_qry_as_rdr(conn);
|
||||
}
|
||||
public void Load_ttls_for_all_pages(Cancelable cancelable, ListAdp rslt_list, Xodb_page rslt_nxt, Xodb_page rslt_prv, Int_obj_ref rslt_count, Xow_ns ns, byte[] key, int max_results, int min_page_len, int browse_len, boolean include_redirects, boolean fetch_prv_item) {
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
@@ -179,7 +179,7 @@ public class Xodb_page_tbl {
|
||||
Db_qry qry = Db_qry_sql.rdr_("SELECT page_id, page_namespace, page_title, page_len FROM page INDEXED BY page__title WHERE page_namespace = " + Int_.Xto_str(ns.Id()) + " AND page_title BETWEEN '" + search_bgn + "' AND '" + search_end + "' ORDER BY page_len DESC LIMIT " + Int_.Xto_str(max_results) + ";");
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
try {
|
||||
rdr = provider.Exec_qry_as_rdr(qry);
|
||||
rdr = conn.Exec_qry_as_rdr(qry);
|
||||
while (rdr.MoveNextPeer()) {
|
||||
if (cancelable.Canceled()) return;
|
||||
Xodb_page page = new Xodb_page();
|
||||
@@ -204,7 +204,7 @@ public class Xodb_page_tbl {
|
||||
}
|
||||
Xodb_in_wkr_page_id wkr = new Xodb_in_wkr_page_id();
|
||||
wkr.Init(rv, hash);
|
||||
wkr.Select_in(provider, cancelable, db_ctx, bgn, end);
|
||||
wkr.Select_in(conn, cancelable, db_ctx, bgn, end);
|
||||
return true;
|
||||
}
|
||||
public byte[] Select_random(Xow_ns ns) {// ns should be ns_main
|
||||
@@ -213,10 +213,10 @@ public class Xodb_page_tbl {
|
||||
Db_stmt stmt = Db_stmt_.Null;
|
||||
byte[] rv = null;
|
||||
try {
|
||||
stmt = Db_stmt_.new_select_(provider, Tbl_name, String_.Ary(Fld_page_ns, Fld_page_random_int), Fld_page_title);
|
||||
stmt = Db_stmt_.new_select_(conn, Tbl_name, String_.Ary(Fld_page_ns, Fld_page_random_int), Fld_page_title);
|
||||
rdr = stmt
|
||||
.Val_int_(ns.Id())
|
||||
.Val_int_(random_int)
|
||||
.Val_int(ns.Id())
|
||||
.Val_int(random_int)
|
||||
.Exec_select();
|
||||
if (rdr.MoveNextPeer()) {
|
||||
rv = rdr.ReadBryByStr(Fld_page_title);
|
||||
@@ -232,8 +232,8 @@ public class Xodb_page_tbl {
|
||||
Db_stmt stmt = Db_stmt_.Null;
|
||||
search = Bry_.Replace(search, Byte_ascii.Asterisk, Byte_ascii.Percent);
|
||||
try {
|
||||
stmt = provider.Prepare(qry);
|
||||
rdr = stmt.Clear().Val_int_(Xow_ns_.Id_main).Val_str_by_bry_(search).Exec_select();
|
||||
stmt = conn.New_stmt(qry);
|
||||
rdr = stmt.Clear().Val_int(Xow_ns_.Id_main).Val_bry_as_str(search).Exec_select();
|
||||
while (rdr.MoveNextPeer()) {
|
||||
if (cancelable.Canceled()) return;
|
||||
Xodb_page page = new Xodb_page();
|
||||
@@ -251,21 +251,21 @@ public class Xodb_page_tbl {
|
||||
int increment_pos = rv[rv_len - 1] == Byte_ascii.Percent ? rv_len - 2 : rv_len - 1; // increment last char, unless it is %; if %, increment one before it
|
||||
return Bry_.Increment_last(rv, increment_pos);
|
||||
}
|
||||
public Db_stmt Select_for_parse_all_stmt(Db_provider p, int limit, byte redirect) {
|
||||
public Db_stmt Select_for_parse_all_stmt(Db_conn p, int limit, byte redirect) {
|
||||
Criteria crt = gplx.criterias.Criteria_.And_many(Db_crt_.eq_(Fld_page_ns, -1), Db_crt_.mt_(Fld_page_title, ""));
|
||||
if (redirect != Bool_.__byte)
|
||||
crt = gplx.criterias.Criteria_.And(crt, Db_crt_.eq_(Fld_page_is_redirect, redirect));
|
||||
Db_qry_select qry = Db_qry_.select_().From_(Tbl_name).Cols_(html_db_enabled ? Flds_select_all__html_y : Flds_select_all__html_n)
|
||||
.Where_(crt)
|
||||
.Limit_(limit);
|
||||
return p.Prepare(qry);
|
||||
return p.New_stmt(qry);
|
||||
}
|
||||
public void Select_for_parse_all(Cancelable cancelable, OrderedHash rv, Db_stmt stmt, int ns, byte[] ttl, byte redirect) {
|
||||
String ttl_str = String_.new_utf8_(ttl);
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
try {
|
||||
stmt.Clear().Val_int_(ns).Val_str_(ttl_str);
|
||||
if (redirect != Bool_.__byte) stmt.Val_byte_(redirect);
|
||||
stmt.Clear().Val_int(ns).Val_str(ttl_str);
|
||||
if (redirect != Bool_.__byte) stmt.Val_byte(redirect);
|
||||
rdr = stmt.Exec_select();
|
||||
while (rdr.MoveNextPeer()) {
|
||||
if (cancelable.Canceled()) return;
|
||||
@@ -279,17 +279,17 @@ public class Xodb_page_tbl {
|
||||
Xodb_in_wkr_page_title_ns wkr = new Xodb_in_wkr_page_title_ns();
|
||||
wkr.Fill_idx_fields_only_(fill_idx_fields_only);
|
||||
wkr.Init(ns_mgr, rv);
|
||||
wkr.Select_in(provider, cancelable, db_ctx, bgn, end);
|
||||
wkr.Select_in(conn, cancelable, db_ctx, bgn, end);
|
||||
}
|
||||
public void Select_by_ttl_in(Cancelable cancelable, OrderedHash rv, int ns_id, int bgn, int end) {
|
||||
Xodb_in_wkr_page_title wkr = new Xodb_in_wkr_page_title();
|
||||
wkr.Init(rv, ns_id);
|
||||
wkr.Select_in(provider, cancelable, db_ctx, bgn, end);
|
||||
wkr.Select_in(conn, cancelable, db_ctx, bgn, end);
|
||||
}
|
||||
public void Update_html_db_id(int page_id, int html_db_id) {
|
||||
if (!html_db_enabled) throw Err_.new_("html_db not enabled");
|
||||
Db_stmt stmt = Db_stmt_.new_update_(provider, Tbl_name, String_.Ary(Fld_page_id), Fld_page_html_db_id);
|
||||
stmt.Val_int_(html_db_id).Val_int_(page_id).Exec_update();
|
||||
Db_stmt stmt = Db_stmt_.new_update_(conn, Tbl_name, String_.Ary(Fld_page_id), Fld_page_html_db_id);
|
||||
stmt.Val_int(html_db_id).Val_int(page_id).Exec_update();
|
||||
}
|
||||
private static final String Page_touched_fmt = "yyyyMMddHHmmss";
|
||||
private static String Xto_touched_str(DateAdp v) {return v.XtoStr_fmt(Page_touched_fmt);}
|
||||
|
||||
@@ -18,14 +18,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*;
|
||||
import gplx.dbs.*;
|
||||
public class Xodb_search_title_page_tbl {
|
||||
public static void Create_table(Db_provider p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);}
|
||||
public static void Create_index_unique(Gfo_usr_dlg usr_dlg, Db_provider p) {Sqlite_engine_.Idx_create(usr_dlg, p, "search", Idx_main_unique);}
|
||||
public static void Create_index_non_unique(Gfo_usr_dlg usr_dlg, Db_provider p) {Sqlite_engine_.Idx_create(usr_dlg, p, "search", Idx_main_non_unique);}
|
||||
public static Db_stmt Insert_stmt(Db_provider p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_stp_word_id, Fld_stp_page_id);}
|
||||
public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);}
|
||||
public static void Create_index_unique(Gfo_usr_dlg usr_dlg, Db_conn p) {Sqlite_engine_.Idx_create(usr_dlg, p, "search", Idx_main_unique);}
|
||||
public static void Create_index_non_unique(Gfo_usr_dlg usr_dlg, Db_conn p) {Sqlite_engine_.Idx_create(usr_dlg, p, "search", Idx_main_non_unique);}
|
||||
public static Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_stp_word_id, Fld_stp_page_id);}
|
||||
public static void Insert(Db_stmt stmt, int word_id, int page_id) {
|
||||
stmt.Clear()
|
||||
.Val_int_(word_id)
|
||||
.Val_int_(page_id)
|
||||
.Val_int(word_id)
|
||||
.Val_int(page_id)
|
||||
.Exec_insert();
|
||||
}
|
||||
public static final String Tbl_name = "search_title_page", Fld_stp_word_id = "stp_word_id", Fld_stp_page_id = "stp_page_id";
|
||||
|
||||
@@ -18,16 +18,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*;
|
||||
import gplx.dbs.*;
|
||||
public class Xodb_search_title_word_tbl {
|
||||
public static void Create_table(Db_provider p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);}
|
||||
public static void Create_index(Gfo_usr_dlg usr_dlg, Db_provider p) {Sqlite_engine_.Idx_create(usr_dlg, p, "search", Indexes_main);}
|
||||
public static Db_stmt Insert_stmt(Db_provider p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_stw_word_id, Fld_stw_word);}
|
||||
public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);}
|
||||
public static void Create_index(Gfo_usr_dlg usr_dlg, Db_conn p) {Sqlite_engine_.Idx_create(usr_dlg, p, "search", Indexes_main);}
|
||||
public static Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_stw_word_id, Fld_stw_word);}
|
||||
public static void Insert(Db_stmt stmt, int word_id, byte[] word) {
|
||||
stmt.Clear()
|
||||
.Val_int_(word_id)
|
||||
.Val_str_by_bry_(word)
|
||||
.Val_int(word_id)
|
||||
.Val_bry_as_str(word)
|
||||
.Exec_insert();
|
||||
}
|
||||
public static void Select_by_word(Cancelable cancelable, ListAdp rv, Xodb_ctx db_ctx, byte[] search, int results_max, Db_provider p) {
|
||||
public static void Select_by_word(Cancelable cancelable, ListAdp rv, Xodb_ctx db_ctx, byte[] search, int results_max, Db_conn p) {
|
||||
Db_qry_select qry = Db_qry_.select_()
|
||||
.Cols_(Xodb_search_title_word_tbl.Fld_stw_word_id)
|
||||
.From_(Xodb_search_title_word_tbl.Tbl_name, "w")
|
||||
@@ -82,7 +82,7 @@ class Xodb_in_wkr_search_title_id extends Xodb_in_wkr_base {
|
||||
@Override public void Fill_stmt(Db_stmt stmt, int bgn, int end) {
|
||||
for (int i = bgn; i < end; i++) {
|
||||
Int_obj_val word_id = (Int_obj_val)words.FetchAt(i);
|
||||
stmt.Val_int_(word_id.Val());
|
||||
stmt.Val_int(word_id.Val());
|
||||
}
|
||||
}
|
||||
@Override public void Eval_rslts(Cancelable cancelable, Xodb_ctx db_ctx, DataRdr rdr) {
|
||||
|
||||
@@ -18,15 +18,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*;
|
||||
import gplx.dbs.*;
|
||||
public class Xodb_site_stats_tbl {
|
||||
public void Provider_(Db_provider provider) {this.provider = provider;} Db_provider provider;
|
||||
public void Conn_(Db_conn conn) {this.conn = conn;} Db_conn conn;
|
||||
public void Update(int num_articles, int num_pages, int num_files) {
|
||||
Db_stmt stmt = Db_stmt_.Null;
|
||||
try {
|
||||
stmt = Db_stmt_.new_update_(provider, Tbl_name, String_.Ary(Fld_ss_row_id), Fld_ss_good_articles, Fld_ss_total_pages, Fld_ss_images);
|
||||
stmt.Val_int_(num_articles)
|
||||
.Val_int_(num_pages)
|
||||
.Val_int_(num_files)
|
||||
.Val_int_(1)
|
||||
stmt = Db_stmt_.new_update_(conn, Tbl_name, String_.Ary(Fld_ss_row_id), Fld_ss_good_articles, Fld_ss_total_pages, Fld_ss_images);
|
||||
stmt.Val_int(num_articles)
|
||||
.Val_int(num_pages)
|
||||
.Val_int(num_files)
|
||||
.Val_int(1)
|
||||
.Exec_update();
|
||||
;
|
||||
} finally {stmt.Rls();}
|
||||
@@ -36,7 +36,7 @@ public class Xodb_site_stats_tbl {
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
Db_stmt stmt = Db_stmt_.Null;
|
||||
try {
|
||||
stmt = Db_stmt_.new_select_all_(provider, Tbl_name);
|
||||
stmt = Db_stmt_.new_select_all_(conn, Tbl_name);
|
||||
rdr = stmt.Exec_select();
|
||||
if (rdr.MoveNextPeer()) {
|
||||
stats.NumArticles_ (rdr.ReadInt(Fld_ss_good_articles));
|
||||
|
||||
@@ -19,25 +19,25 @@ package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.
|
||||
import gplx.dbs.*; import gplx.ios.*;
|
||||
public class Xodb_text_tbl {
|
||||
public Xodb_text_tbl(Xodb_mgr_sql db_mgr) {this.db_mgr = db_mgr; zip_mgr = db_mgr.Wiki().App().Zip_mgr();} private Xodb_mgr_sql db_mgr; private Io_stream_zip_mgr zip_mgr;
|
||||
public void Delete_all(Db_provider provider) {provider.Exec_qry(Db_qry_.delete_tbl_(Tbl_name));}
|
||||
public Db_stmt Insert_stmt(Db_provider prov) {return Db_stmt_.new_insert_(prov, Tbl_name, Fld_page_id, Fld_old_text);}
|
||||
public void Delete_all(Db_conn conn) {conn.Exec_qry(Db_qry_.delete_tbl_(Tbl_name));}
|
||||
public Db_stmt Insert_stmt(Db_conn prov) {return Db_stmt_.new_insert_(prov, Tbl_name, Fld_page_id, Fld_old_text);}
|
||||
public void Insert(Db_stmt stmt, int page_id, byte[] text, byte storage_type) {
|
||||
stmt.Clear().Val_int_(page_id).Val_bry_(text).Exec_insert();
|
||||
stmt.Clear().Val_int(page_id).Val_bry(text).Exec_insert();
|
||||
}
|
||||
public void Update(int file_id, int page_id, byte[] text) {
|
||||
Db_stmt stmt = Db_stmt_.Null;
|
||||
try {
|
||||
Db_provider provider = db_mgr.Fsys_mgr().Get_by_idx(file_id).Provider();
|
||||
stmt = Db_stmt_.new_update_(provider, Tbl_name, String_.Ary(Fld_page_id), Fld_old_text);
|
||||
stmt.Val_bry_(text).Val_int_(page_id).Exec_update();
|
||||
Db_conn conn = db_mgr.Fsys_mgr().Get_by_idx(file_id).Conn();
|
||||
stmt = Db_stmt_.new_update_(conn, Tbl_name, String_.Ary(Fld_page_id), Fld_old_text);
|
||||
stmt.Val_bry(text).Val_int(page_id).Exec_update();
|
||||
} finally {stmt.Rls();}
|
||||
}
|
||||
public byte[] Select(int file_id, int page_id) {
|
||||
Db_stmt stmt = Db_stmt_.Null;
|
||||
try {
|
||||
Db_provider provider = db_mgr.Fsys_mgr().Get_by_idx(file_id).Provider();
|
||||
stmt = Db_stmt_.new_select_(provider, Tbl_name, String_.Ary(Fld_page_id), Fld_old_text);
|
||||
byte[] rv = (byte[])stmt.Val_int_(page_id).Exec_select_val();
|
||||
Db_conn conn = db_mgr.Fsys_mgr().Get_by_idx(file_id).Conn();
|
||||
stmt = Db_stmt_.new_select_(conn, Tbl_name, String_.Ary(Fld_page_id), Fld_old_text);
|
||||
byte[] rv = (byte[])stmt.Val_int(page_id).Exec_select_val();
|
||||
rv = zip_mgr.Unzip(db_mgr.Data_storage_format(), rv);
|
||||
return rv;
|
||||
} finally {stmt.Rls();}
|
||||
@@ -60,11 +60,11 @@ public class Xodb_text_tbl {
|
||||
if (cancelable.Canceled()) return;
|
||||
args_ary[i] = 0;
|
||||
}
|
||||
stmt = Db_stmt_.new_select_in_(file.Provider(), Tbl_name, Fld_page_id, args_ary);
|
||||
stmt = Db_stmt_.new_select_in_(file.Conn(), Tbl_name, Fld_page_id, args_ary);
|
||||
for (int i = 0; i < len; i++) {
|
||||
if (cancelable.Canceled()) return;
|
||||
Xodb_page page = (Xodb_page)pages.FetchAt(i);
|
||||
stmt.Val_int_(page.Id());
|
||||
stmt.Val_int(page.Id());
|
||||
}
|
||||
rdr = stmt.Exec_select();
|
||||
while (rdr.MoveNextPeer()) {
|
||||
|
||||
@@ -18,16 +18,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*;
|
||||
import gplx.dbs.*; import gplx.xowa.xtns.wdatas.*;
|
||||
public class Xodb_wdata_pids_tbl {
|
||||
public void Purge(Db_provider p) {p.Exec_qry(Db_qry_.delete_tbl_(Tbl_name));}
|
||||
public Db_stmt Insert_stmt(Db_provider p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_wp_src_lang, Fld_wp_src_ttl, Fld_wp_trg_ttl);}
|
||||
public void Purge(Db_conn p) {p.Exec_qry(Db_qry_.delete_tbl_(Tbl_name));}
|
||||
public Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_wp_src_lang, Fld_wp_src_ttl, Fld_wp_trg_ttl);}
|
||||
public void Insert(Db_stmt stmt, byte[] src_lang, byte[] src_ttl, byte[] trg_ttl) {
|
||||
stmt.Clear().Val_str_by_bry_(src_lang).Val_str_by_bry_(src_ttl).Val_str_by_bry_(trg_ttl).Exec_insert();
|
||||
stmt.Clear().Val_bry_as_str(src_lang).Val_bry_as_str(src_ttl).Val_bry_as_str(trg_ttl).Exec_insert();
|
||||
}
|
||||
public int Select_pid(Db_provider p, byte[] src_lang, byte[] src_ttl) {
|
||||
public int Select_pid(Db_conn p, byte[] src_lang, byte[] src_ttl) {
|
||||
Db_stmt stmt = Db_stmt_.Null;
|
||||
try {
|
||||
stmt = Db_stmt_.new_select_(p, Tbl_name, String_.Ary(Fld_wp_src_lang, Fld_wp_src_ttl), Fld_wp_trg_ttl);
|
||||
String pid_str = (String)stmt.Val_str_by_bry_(src_lang).Val_str_by_bry_(src_ttl).Exec_select_val();
|
||||
String pid_str = (String)stmt.Val_bry_as_str(src_lang).Val_bry_as_str(src_ttl).Exec_select_val();
|
||||
if (pid_str == null) return Wdata_wiki_mgr.Pid_null; // occurs when pid exists, but does not have entry for language; see hu.w:Marco Polo argali; DATE: 2014-02-01
|
||||
byte[] pid_bry = Bry_.new_utf8_(pid_str);
|
||||
return pid_bry == null ? Wdata_wiki_mgr.Pid_null : Bry_.Xto_int_or(pid_bry, 1, pid_bry.length, Wdata_wiki_mgr.Pid_null);
|
||||
|
||||
@@ -18,16 +18,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*;
|
||||
import gplx.dbs.*;
|
||||
public class Xodb_wdata_qids_tbl {
|
||||
public void Purge(Db_provider p) {p.Exec_qry(Db_qry_.delete_tbl_(Tbl_name));}
|
||||
public Db_stmt Insert_stmt(Db_provider p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_wq_src_wiki, Fld_wq_src_ns, Fld_wq_src_ttl, Fld_wq_trg_ttl);}
|
||||
public void Purge(Db_conn p) {p.Exec_qry(Db_qry_.delete_tbl_(Tbl_name));}
|
||||
public Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_wq_src_wiki, Fld_wq_src_ns, Fld_wq_src_ttl, Fld_wq_trg_ttl);}
|
||||
public void Insert(Db_stmt stmt, byte[] src_wiki, int src_ns, byte[] src_ttl, byte[] trg_ttl) {
|
||||
stmt.Clear().Val_str_by_bry_(src_wiki).Val_int_(src_ns).Val_str_by_bry_(src_ttl).Val_str_by_bry_(trg_ttl).Exec_insert();
|
||||
stmt.Clear().Val_bry_as_str(src_wiki).Val_int(src_ns).Val_bry_as_str(src_ttl).Val_bry_as_str(trg_ttl).Exec_insert();
|
||||
}
|
||||
public byte[] Select_qid(Db_provider p, byte[] src_wiki, byte[] src_ns, byte[] src_ttl) {
|
||||
public byte[] Select_qid(Db_conn p, byte[] src_wiki, byte[] src_ns, byte[] src_ttl) {
|
||||
Db_stmt stmt = Db_stmt_.Null;
|
||||
try {
|
||||
stmt = Db_stmt_.new_select_(p, Tbl_name, String_.Ary(Fld_wq_src_wiki, Fld_wq_src_ns, Fld_wq_src_ttl), Fld_wq_trg_ttl);
|
||||
String rv = (String)stmt.Val_str_by_bry_(src_wiki).Val_int_(Bry_.Xto_int(src_ns)).Val_str_by_bry_(src_ttl).Exec_select_val();
|
||||
String rv = (String)stmt.Val_bry_as_str(src_wiki).Val_int(Bry_.Xto_int(src_ns)).Val_bry_as_str(src_ttl).Exec_select_val();
|
||||
return rv == null ? null : Bry_.new_utf8_(rv);
|
||||
} finally {stmt.Rls();}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user