1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2026-03-02 03:49:30 +00:00
This commit is contained in:
gnosygnu
2015-08-17 02:09:16 -04:00
parent 34c34f227c
commit df10db140c
421 changed files with 4867 additions and 2429 deletions

View File

@@ -22,7 +22,7 @@ public class Db_conn {
public Db_conn(Db_engine engine) {this.engine = engine;}
public Db_conn_info Conn_info() {return engine.Conn_info();}
public boolean Eq(Db_conn comp) {return String_.Eq(engine.Conn_info().Xto_api(), comp.Conn_info().Xto_api());}
public void Txn_bgn() {engine.Txn_bgn("");}
// public void Txn_bgn() {engine.Txn_bgn("");}
public void Txn_bgn(String name) {engine.Txn_bgn(name);}
public void Txn_end() {engine.Txn_end();}
public void Txn_cxl() {engine.Txn_cxl();}
@@ -67,7 +67,7 @@ public class Db_conn {
public int Exec_sql_plog_txn(String msg, String sql) {return Exec_sql_plog(Bool_.Y, msg, sql);}
public int Exec_sql_plog(boolean txn, String msg, String sql) {
Gfo_usr_dlg_.I.Plog_many("", "", msg);
if (txn) this.Txn_bgn();
if (txn) this.Txn_bgn(msg);
int rv = Exec_sql(sql);
if (txn) this.Txn_end();
Gfo_usr_dlg_.I.Plog_many("", "", "done:" + msg);

View File

@@ -37,7 +37,7 @@ public abstract class Db_conn_info__base implements Db_conn_info {
if (hash.Has(xtn.Key())) continue;
sb.Add_fmt("{0}={1};", xtn.Key(), xtn.Val_to_str_or_empty());
}
return sb.XtoStr();
return sb.To_str();
}
protected static String Bld_raw(String... ary) {
Bry_bfr bfr = Bry_bfr.reset_(255);

View 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; import gplx.*;
public interface Db_tbl extends RlsAble {
void Create_tbl();
}

View File

@@ -0,0 +1,30 @@
/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012 gnosygnu@gmail.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.dbs; import gplx.*;
public class Db_tbl_ {
public static void Create_tbl(Db_tbl... ary) {
int len = ary.length;
for (int i = 0; i < len; ++i)
ary[i].Create_tbl();
}
public static void Rls(Db_tbl... ary) {
int len = ary.length;
for (int i = 0; i < len; ++i)
ary[i].Rls();
}
}

View File

@@ -26,7 +26,7 @@ public interface Db_engine {
Object New_stmt_prep_as_obj(String sql);
DataRdr New_rdr(java.sql.ResultSet rdr, String sql);
void Txn_bgn(String name);
void Txn_end();
String Txn_end();
void Txn_cxl();
void Txn_sav();
void Conn_open();

View File

@@ -27,10 +27,13 @@ public abstract class Db_engine_sql_base implements Db_engine {
public Db_rdr New_rdr__rls_auto(Db_stmt stmt, Object rdr_obj, String sql) {return New_rdr(stmt, rdr_obj, sql);}
@gplx.Virtual public Db_rdr New_rdr_clone() {return new Db_rdr__basic();}
public Db_stmt New_stmt_prep(Db_qry qry) {return new Db_stmt_cmd(this, qry);}
@gplx.Virtual public void Txn_bgn(String name) {Exec_as_obj(Db_qry_sql.xtn_("BEGIN TRANSACTION;"));}
@gplx.Virtual public void Txn_end() {Exec_as_obj(Db_qry_sql.xtn_("COMMIT TRANSACTION;"));}
@gplx.Virtual public void Txn_cxl() {Exec_as_obj(Db_qry_sql.xtn_("ROLLBACK TRANSACTION;"));}
@gplx.Virtual public void Txn_sav() {this.Txn_end(); this.Txn_bgn("");}
@gplx.Virtual public void Txn_bgn(String name) {Exec_as_obj(Db_qry_sql.xtn_("BEGIN TRANSACTION;"));}
@gplx.Virtual public String Txn_end() {Exec_as_obj(Db_qry_sql.xtn_("COMMIT TRANSACTION;")); return "";}
@gplx.Virtual public void Txn_cxl() {Exec_as_obj(Db_qry_sql.xtn_("ROLLBACK TRANSACTION;"));}
@gplx.Virtual public void Txn_sav() {
String txn_name = this.Txn_end();
this.Txn_bgn(txn_name);
}
public Object Exec_as_obj(Db_qry qry) {
if (qry.Tid() == Db_qry_.Tid_flush) return null; // ignore flush (delete-db) statements
String sql = this.SqlWtr().Xto_str(qry, false); // DBG: Tfds.Write(sql);

View File

@@ -25,7 +25,7 @@ public class Db_engine__mem implements Db_engine {
public Db_stmt New_stmt_prep(Db_qry qry) {return new Db_stmt__mem(this, qry);}
public Mem_tbl Tbls_get(String name) {return (Mem_tbl)tbl_hash.Get_by(name);}
public void Txn_bgn(String name) {++txn_count;} private int txn_count = 0;
public void Txn_end() {--txn_count;}
public String Txn_end() {--txn_count; return "";}
public void Txn_cxl() {--txn_count;}
public void Txn_sav() {this.Txn_end(); this.Txn_bgn("");}
public Object Exec_as_obj(Db_qry qry) {throw Err_.new_unimplemented();}

View File

@@ -28,7 +28,7 @@ public class Noop_engine implements Db_engine {
public Object New_stmt_prep_as_obj(String sql) {throw Err_.new_unimplemented();}
public DataRdr New_rdr(java.sql.ResultSet rdr, String sql) {return DataRdr_.Null;}
public void Txn_bgn(String name) {}
public void Txn_end() {}
public String Txn_end() {return "";}
public void Txn_cxl() {}
public void Txn_sav() {}
public Object Exec_as_obj(Db_qry cmd) {return cmd.Exec_is_rdr() ? (Object)DataRdr_.Null : -1;}

View File

@@ -36,7 +36,7 @@ public class Sqlite_engine extends Db_engine_sql_base {
@Override public void Env_db_attach(String alias, Io_url db_url) {Exec_as_int(String_.Format("ATTACH '{0}' AS {1};", db_url.Raw(), alias));}
@Override public void Env_db_detach(String alias) {Exec_as_int(String_.Format("DETACH {0};", alias));}
@Override public void Txn_bgn(String name) {txn_mgr.Txn_bgn(name);}
@Override public void Txn_end() {txn_mgr.Txn_end();}
@Override public String Txn_end() {return txn_mgr.Txn_end();}
@Override public void Txn_cxl() {txn_mgr.Txn_cxl();}
@Override public void Txn_sav() {txn_mgr.Txn_sav();}
@Override public boolean Meta_tbl_exists(String tbl) {return schema_mgr.Tbl_exists(tbl);}

View File

@@ -42,8 +42,8 @@ public class Sqlite_txn_mgr {
}
txn_list.Add(name);
}
public void Txn_end() {
if (txn_list.Count() == 0) {Gfo_usr_dlg_.I.Warn_many("", "", "no txns in stack;"); return;}
public String Txn_end() {
if (txn_list.Count() == 0) {Gfo_usr_dlg_.I.Warn_many("", "", "no txns in stack;"); return "";}
String txn_last = (String)List_adp_.Pop_last(txn_list);
if (txn_list.Count() == 0) {// no txns left; commit it
engine.Exec_as_obj(Db_qry_sql.xtn_("COMMIT TRANSACTION;"));
@@ -51,6 +51,7 @@ public class Sqlite_txn_mgr {
}
else
engine.Exec_as_obj(Db_qry_sql.xtn_(String_.Format("RELEASE SAVEPOINT {0};", txn_last)));
return txn_last;
}
public void Txn_cxl() {
if (txn_list.Count() == 0) {Gfo_usr_dlg_.I.Warn_many("", "", "no txns in stack;"); return;}

View File

@@ -45,7 +45,7 @@ public class TdbDbLoadMgr_tst {
Tfds.Eq(file2.Path().Raw(), "C:\\file.dsv");
db.Files().DataObj_Wtr(wtr);
Tfds.Eq(wtr.XtoStr(), raw);
Tfds.Eq(wtr.To_str(), raw);
}
@Test public void ReadDbTbls() {
String raw = String_.Concat_lines_crlf
@@ -66,7 +66,7 @@ public class TdbDbLoadMgr_tst {
Tfds.Eq(table.File().Id(), 1);
db.Tables().DataObj_Wtr(wtr);
Tfds.Eq(wtr.XtoStr(), raw);
Tfds.Eq(wtr.To_str(), raw);
}
@Test public void ReadTbl() {
String raw = String_.Concat_lines_crlf
@@ -91,7 +91,7 @@ public class TdbDbLoadMgr_tst {
Tfds.Eq(row.Read("name"), "me");
tbl.DataObj_Wtr(wtr);
Tfds.Eq(wtr.XtoStr(), raw);
Tfds.Eq(wtr.To_str(), raw);
}
DataRdr rdr_(String raw) {
DataRdr rdr = DsvDataRdr_.dsv_(raw);

View File

@@ -48,7 +48,7 @@ class TdbDbSaveMgr {
TdbTable tbl = (TdbTable)tblObj;
tbl.DataObj_Wtr(wtr);
}
Io_mgr.I.SaveFilStr(fil.Path(), wtr.XtoStr());
Io_mgr.I.SaveFilStr(fil.Path(), wtr.To_str());
}
List_adp FetchTablesWithSamePath(TdbDatabase db, Io_url filPath) {
List_adp list = List_adp_.new_();

View File

@@ -37,7 +37,7 @@ public class TdbDbSaveMgr_tst {
, "1,mem/dir/db0.dsv,dsv"
);
db.Files().DataObj_Wtr(wtr);
String actl = wtr.XtoStr();
String actl = wtr.To_str();
Tfds.Eq(expd, actl);
}
@Test public void WriteDbTbls() {
@@ -52,7 +52,7 @@ public class TdbDbSaveMgr_tst {
, "================================, ,\" \",//"
);
db.Tables().DataObj_Wtr(wtr);
String actl = wtr.XtoStr();
String actl = wtr.To_str();
Tfds.Eq(expd, actl);
}
@Test public void WriteTbl() {
@@ -71,7 +71,7 @@ public class TdbDbSaveMgr_tst {
tbl.Flds().Add("name", StringClassXtn._);
tbl.DataObj_Wtr(wtr);
String actl = wtr.XtoStr();
String actl = wtr.To_str();
Tfds.Eq(expd, actl);
}
}

View File

@@ -28,7 +28,7 @@ public class TdbEngine implements Db_engine {
}
public void Conn_term() {}
public void Txn_bgn(String name) {}
public void Txn_end() {}
public String Txn_end() {return "";}
public void Txn_cxl() {}
public void Txn_sav() {}
public Db_engine New_clone(Db_conn_info conn_info) {

View File

@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package gplx.dbs.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*;
import gplx.lists.*; /*Ordered_hash_base*/ import gplx.stores.dsvs.*; /*DsvStoreLayout*/
public class TdbFileList extends Ordered_hash_base {
public TdbFile Get_by_or_fail(int id) {return TdbFile.as_(FetchOrFail_base(id));}
public TdbFile Get_by_or_fail(int id) {return TdbFile.as_(Get_by_or_fail_base(id));}
public void Add(TdbFile src) {Add_base(src.Id(), src);}
Io_url dbInfo;

View File

@@ -34,7 +34,7 @@ class TdbInsertWkr implements Db_qryWkr {
GfoFldList selectFldsForNewRow = null;
try {selectFldsForNewRow = insertFlds.XtoGfoFldLst(tbl);}
catch (Exception e) {throw Err_.new_exc(e, "db", "failed to generate flds for new row");}
if (insertFldsCount > selectFldsForNewRow.Count()) throw Err_.new_wo_type("insert flds cannot exceed selectFlds", "insertFlds", insertFlds.XtoStr(), "selectFlds", selectFldsForNewRow.XtoStr());
if (insertFldsCount > selectFldsForNewRow.Count()) throw Err_.new_wo_type("insert flds cannot exceed selectFlds", "insertFlds", insertFlds.To_str(), "selectFlds", selectFldsForNewRow.To_str());
while (rdr.MoveNextPeer()) {
count++;
GfoNde row = GfoNde_.vals_(selectFldsForNewRow, new Object[insertFldsCount]);

View File

@@ -56,7 +56,7 @@ public class Db_qry__select_in_tbl implements Db_qry {
if (having_sql != null) sb.Add(having_sql);
if (order_by_sql != null) {sb.Add(" ORDER BY "); sb.Add(order_by_sql);}
if (limit_sql != null) sb.Add(limit_sql);
return sb.XtoStr();
return sb.To_str();
}
}
public static Db_qry__select_in_tbl new_(String base_table, String[] where_flds, String[] select_flds, String[] order_flds) {

View File

@@ -72,18 +72,18 @@ public class Db_qry_select_tst {
// @Test public void GroupBy() {
// cmd.From_("tbl0").groupBy_("fld0", "fld1");
// expd = "SELECT fld0, fld1 FROM tbl0 GROUP BY fld0, fld1";
// Tfds.Eq(cmd.XtoStr(), expd);
// Tfds.Eq(cmd.To_str(), expd);
// }
// @Test public void Union() {
// cmd.From_("tbl0").select("fld0").union_(qry2.from("tbl1").select("fld0"));
// cmd.From_("tbl0").select("fld0").union_().from("tbl1").select("fld0"); // feasible, but will be bad later when trying to access Db_qry__select_cmd props
// expd = "SELECT fld0 FROM tbl0 UNION SELECT fld0 FROM tbl1";
// Tfds.Eq(cmd.XtoStr(), expd);
// Tfds.Eq(cmd.To_str(), expd);
// }
// @Test public void Having() {
// cmd.From_("tbl0").groupBy_("fld0", "fld1");
// expd = "SELECT fld0, fld1 FROM tbl0 GROUP BY fld0, fld1 HAVING Count(fld0) > 1";
// Tfds.Eq(cmd.XtoStr(), expd);
// Tfds.Eq(cmd.To_str(), expd);
// }
void tst_XtoStr(Db_qry qry, String expd) {Tfds.Eq(expd, cmd.Xto_sql());}
}

View File

@@ -24,7 +24,7 @@ public class Db_obj_ary_crt implements gplx.core.criterias.Criteria {
public void Val_from_args(Hash_adp args) {throw Err_.new_unimplemented();}
public void Val_as_obj_(Object v) {throw Err_.new_unimplemented();}
public boolean Matches(Object obj) {return false;}
public String XtoStr() {return "";}
public String To_str() {return "";}
public static Db_obj_ary_crt new_(Db_fld... flds) {return new Db_obj_ary_crt().Flds_(flds);}
public static Db_obj_ary_crt new_by_type(byte type_tid, String... names) {
int len = names.length;

View File

@@ -211,7 +211,7 @@ public class Sql_qry_wtr_ansi implements Sql_qry_wtr {
Append_db_obj_ary(sb, (Db_obj_ary_crt)crt);
}
else {
Criteria_fld leaf = Criteria_fld.as_(crt); if (leaf == null) throw Err_.new_invalid_op(crt.XtoStr());
Criteria_fld leaf = Criteria_fld.as_(crt); if (leaf == null) throw Err_.new_invalid_op(crt.To_str());
sb.Add(leaf.Key());
Bld_where_crt(sb, leaf.Crt());
}

View File

@@ -55,6 +55,6 @@ public class Sql_qry_wtr_iosql_tst {
String_bldr sb = String_bldr_.new_();
Sql_qry_wtr_ansi whereWtr = (Sql_qry_wtr_ansi)Sql_qry_wtr_.new_ansi();
whereWtr.Bld_where_val(sb, crt);
Tfds.Eq(expd, sb.XtoStr());
Tfds.Eq(expd, sb.To_str());
}
}

View File

@@ -50,11 +50,11 @@ class Sql_qry_wtr_fxt {
String_bldr sb = String_bldr_.new_();
Db_arg arg = new Db_arg("not needed", val);
sql_wtr.Bld_val(sb, arg);
Tfds.Eq(expd, sb.XtoStr());
Tfds.Eq(expd, sb.To_str());
}
public void Test_where(Criteria crt, String expd) {
String_bldr sb = String_bldr_.new_();
sql_wtr.Bld_where_val(sb, crt);
Tfds.Eq(expd, sb.XtoStr());
Tfds.Eq(expd, sb.To_str());
}
}

View File

@@ -28,8 +28,8 @@ public class Sql_select_fld_list {
for (int i = 0; i < this.Count(); i++) {
Sql_select_fld_base selectFld = this.Get_at(i);
GfoFld fld = tbl.Flds().FetchOrNull(selectFld.Fld());
if (fld == null) throw Err_.new_wo_type("fld not found in tbl", "fldName", selectFld.Fld(), "tblName", tbl.Name(), "tblFlds", tbl.Flds().XtoStr());
if (rv.Has(selectFld.Alias())) throw Err_.new_wo_type("alias is not unique", "fldName", selectFld.Fld(), "flds", rv.XtoStr());
if (fld == null) throw Err_.new_wo_type("fld not found in tbl", "fldName", selectFld.Fld(), "tblName", tbl.Name(), "tblFlds", tbl.Flds().To_str());
if (rv.Has(selectFld.Alias())) throw Err_.new_wo_type("alias is not unique", "fldName", selectFld.Fld(), "flds", rv.To_str());
selectFld.GroupBy_type(fld);
rv.Add(selectFld.Alias(), selectFld.ValType());
}
@@ -44,13 +44,13 @@ public class Sql_select_fld_list {
}
return rv;
}
public String XtoStr() {
public String To_str() {
String_bldr sb = String_bldr_.new_();
for (int i = 0; i < this.Count(); i++) {
Sql_select_fld_base fld = this.Get_at(i);
sb.Add_fmt("{0},{1}|", fld.Fld(), fld.Alias());
}
return sb.XtoStr();
return sb.To_str();
}
Ordered_hash hash = Ordered_hash_.new_();
public static Sql_select_fld_list new_() {return new Sql_select_fld_list();} Sql_select_fld_list() {}

View File

@@ -23,7 +23,7 @@ public class DbMaprRdr extends DataRdr_base implements SrlMgr {
mgr = (DbMaprMgr)this.EnvVars().Get_by_or_fail(DbMaprWtr.Key_Mgr);
DbMaprItm rootMapr = mgr.Root();
GfoNde tbl = GetTbl(rootMapr, rootCrt); int subsCount = tbl.Subs().Count(); if (subsCount == 0) return null; if (subsCount > 1) throw Err_.new_wo_type("criteria returned > 1 row", "criteria", rootCrt.XtoStr(), "subsCount", subsCount);
GfoNde tbl = GetTbl(rootMapr, rootCrt); int subsCount = tbl.Subs().Count(); if (subsCount == 0) return null; if (subsCount > 1) throw Err_.new_wo_type("criteria returned > 1 row", "criteria", rootCrt.To_str(), "subsCount", subsCount);
SrlObj root = subProto.SrlObj_New(null);
mgr.EnvStack_add(rootMapr, root); RowStack_add(tbl, 0);
root.SrlObj_Srl(this);

View File

@@ -81,7 +81,7 @@ public class DbMaprWtr extends DataWtr_base implements DataWtr {
public void WriteLeafBgn(String leafName) {}
public void WriteLeafEnd() {}
public void Clear() {}
public String XtoStr() {return "";}
public String To_str() {return "";}
@Override public SrlMgr SrlMgr_new(Object o) {return new DbMaprWtr();}
DbMaprMgr mgr; Db_conn conn; String curTableName; Db_qry_insert insertCmd;
public static DbMaprWtr new_by_url_(Db_conn_info url) {

View File

@@ -23,7 +23,7 @@ import java.sql.Timestamp;
import java.util.GregorianCalendar;
import gplx.dbs.*;
public class Db_data_rdr extends DataRdr_base implements DataRdr {
@Override public String NameOfNode() {return commandText;} public String XtoStr() {return commandText;} private String commandText;
@Override public String NameOfNode() {return commandText;} public String To_str() {return commandText;} private String commandText;
private ResultSet rdr;
private int fieldCount;
@Override public int FieldCount() {return fieldCount;}