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-01-25 20:56:50 -05:00
parent 1b0042ef8a
commit efaf9dcd00
447 changed files with 10258 additions and 3016 deletions

View File

@@ -16,21 +16,20 @@ 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.stores.*;
import gplx.stores.*; import gplx.dbs.sqls.*;
import java.sql.*;
class Mysql_engine extends Db_engine_sql_base {
@Override public String Key() {return Db_conn_info__mysql.Key_const;}
@Override public String Conn_info_tid() {return this.Key();}
@Override public Sql_cmd_wtr SqlWtr() {return Sql_cmd_wtr_.BackslashSensitive;}
@Override public Db_engine Make_new(Db_conn_info connectInfo) {
@Override public String Tid() {return Db_url__mysql.Tid_const;}
@Override public Sql_qry_wtr SqlWtr() {return Sql_qry_wtr_.new_escape_backslash();}
@Override public Db_engine New_clone(Db_url connectInfo) {
Mysql_engine rv = new Mysql_engine();
rv.ctor_SqlEngineBase(connectInfo);
rv.Ctor(connectInfo);
return rv;
}
@Override public DataRdr NewDataRdr(ResultSet rdr, String commandText) {return Mysql_rdr.new_(rdr, commandText);}
@Override public DataRdr New_rdr(ResultSet rdr, String commandText) {return Mysql_rdr.new_(rdr, commandText);}
@gplx.Internal @Override protected Connection Conn_new() {
Db_conn_info__mysql connUrl = (Db_conn_info__mysql)conn_info;
return NewDbCon("jdbc:mysql://localhost/" + connUrl.Database() + "?characterEncoding=UTF8", connUrl.Uid(), connUrl.Pwd());
Db_url__mysql url_as_mysql = (Db_url__mysql)url;
return Conn_make_by_url("jdbc:mysql://localhost/" + url_as_mysql.Database() + "?characterEncoding=UTF8", url_as_mysql.Uid(), url_as_mysql.Pwd());
}
@gplx.Internal protected static final Mysql_engine _ = new Mysql_engine(); Mysql_engine() {}
}

View File

@@ -16,21 +16,20 @@ 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.stores.*;
import gplx.stores.*; import gplx.dbs.sqls.*;
import java.sql.*;
class Postgres_engine extends Db_engine_sql_base {
@Override public String Key() {return Db_conn_info__postgres.Key_const;}
@Override public String Conn_info_tid() {return this.Key();}
@Override public Sql_cmd_wtr SqlWtr() {return Sql_cmd_wtr_.BackslashSensitive;}
@Override public Db_engine Make_new(Db_conn_info connectInfo) {
@Override public String Tid() {return Db_url__postgres.Tid_const;}
@Override public Sql_qry_wtr SqlWtr() {return Sql_qry_wtr_.new_escape_backslash();}
@Override public Db_engine New_clone(Db_url connectInfo) {
Postgres_engine rv = new Postgres_engine();
rv.ctor_SqlEngineBase(connectInfo);
rv.Ctor(connectInfo);
return rv;
}
@Override public DataRdr NewDataRdr(ResultSet rdr, String commandText) {return Db_data_rdr_.new_(rdr, commandText);}
@Override public DataRdr New_rdr(ResultSet rdr, String commandText) {return Db_data_rdr_.new_(rdr, commandText);}
@gplx.Internal @Override protected Connection Conn_new() {
Db_conn_info__postgres connUrl = (Db_conn_info__postgres)conn_info;
return NewDbCon("jdbc:" + connUrl.Key() + "://localhost/" + connUrl.Database(), connUrl.Uid(), connUrl.Pwd());
Db_url__postgres url_as_postgres = (Db_url__postgres)url;
return Conn_make_by_url("jdbc:" + url_as_postgres.Tid() + "://localhost/" + url_as_postgres.Database(), url_as_postgres.Uid(), url_as_postgres.Pwd());
}
@gplx.Internal protected static final Postgres_engine _ = new Postgres_engine(); Postgres_engine() {}
}

View File

@@ -19,14 +19,14 @@ package gplx.dbs; import gplx.*;
import gplx.stores.*;
import java.sql.*;
class Sqlite_engine extends Db_engine_sql_base {
@Override public String Key() {return Db_conn_info__sqlite.Key_const;}
@Override public String Conn_info_tid() {return this.Key();}
@Override public Db_engine Make_new(Db_conn_info connectInfo) {
@Override public String Tid() {return Db_url__sqlite.Tid_const;}
@Override public Db_engine New_clone(Db_url connectInfo) {
Sqlite_engine rv = new Sqlite_engine();
rv.ctor_SqlEngineBase(connectInfo);
rv.Ctor(connectInfo);
return rv;
}
@Override public DataRdr NewDataRdr(ResultSet rdr, String commandText) {return Sqlite_rdr.new_(rdr, commandText);}
@Override public DataRdr New_rdr(ResultSet rdr, String commandText) {return Sqlite_rdr.new_(rdr, commandText);}
@Override public Db_rdr__basic New_rdr_clone() {return new Db_rdr__sqlite();}
static boolean loaded = false;
@gplx.Internal @Override protected Connection Conn_new() {
if (!loaded) {
@@ -36,8 +36,8 @@ class Sqlite_engine extends Db_engine_sql_base {
catch (ClassNotFoundException e) {throw Err_.new_("could not load sqlite jdbc driver");}
loaded = true;
}
Db_conn_info__sqlite connUrl = (Db_conn_info__sqlite)conn_info;
return NewDbCon("jdbc:sqlite://" + String_.Replace(connUrl.Database(), "\\", "/"), "", "");
Db_url__sqlite url_as_sqlite = (Db_url__sqlite)url;
return Conn_make_by_url("jdbc:sqlite://" + String_.Replace(url_as_sqlite.Database(), "\\", "/"), "", "");
}
private boolean pragma_needed = true;
@Override public void Txn_bgn() {
@@ -45,16 +45,19 @@ class Sqlite_engine extends Db_engine_sql_base {
// Execute(Db_qry_sql.xtn_("PRAGMA journal_mode = OFF;")); // will cause out of memory
// Execute(Db_qry_sql.xtn_("PRAGMA journal_mode = MEMORY;"));
if (pragma_needed) {
Execute(Db_qry_sql.xtn_("PRAGMA synchronous = OFF;"));
Exec_as_obj(Db_qry_sql.xtn_("PRAGMA synchronous = OFF;"));
pragma_needed = false;
}
// Execute(Db_qry_sql.xtn_("PRAGMA temp_store = MEMORY;"));
// Execute(Db_qry_sql.xtn_("PRAGMA locking_mode = EXCLUSIVE;"));
// Execute(Db_qry_sql.xtn_("PRAGMA cache_size=4000;")); // too many will also cause out of memory
Execute(Db_qry_sql.xtn_("BEGIN TRANSACTION;"));
Exec_as_obj(Db_qry_sql.xtn_("BEGIN TRANSACTION;"));
}
@gplx.Internal protected static final Sqlite_engine _ = new Sqlite_engine(); Sqlite_engine() {}
}
class Db_rdr__sqlite extends Db_rdr__basic { @Override public byte Read_byte(int i) {try {return (byte)rdr.getInt(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Byte_.Cls_val_name, Err_.Message_lang(e));}}
@Override public byte Read_byte(String k) {try {return (byte)Int_.cast_(rdr.getObject(k));} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Byte_.Cls_val_name, Err_.Message_lang(e));}}
}
class Sqlite_rdr extends Db_data_rdr { @Override public float ReadFloat(String key) {return ReadFloatOr(key, Float.NaN);}
@Override public float ReadFloatOr(String key, float or) {
Object val = Read(key);

View File

@@ -17,45 +17,45 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.dbs; import gplx.*;
public class Sqlite_engine_ {
public static void Db_attach(Db_provider p, String alias, String url) {
public static void Db_attach(Db_conn p, String alias, String url) {
String s = String_.Format("ATTACH '{0}' AS {1};", url, alias);
Db_qry qry = Db_qry_sql.xtn_(s);
p.Exec_qry(qry);
}
public static void Db_detach(Db_provider p, String alias) {
public static void Db_detach(Db_conn p, String alias) {
String s = String_.Format("DETACH '{0}';", alias);
Db_qry qry = Db_qry_sql.xtn_(s);
p.Exec_qry(qry);
}
public static void Tbl_create_and_delete(Db_provider p, String tbl_name, String tbl_sql) {
public static void Tbl_create_and_delete(Db_conn p, String tbl_name, String tbl_sql) {
Tbl_delete(p, tbl_name);
Db_qry qry = Db_qry_sql.ddl_(tbl_sql);
p.Exec_qry(qry);
}
public static void Tbl_create(Db_provider p, String tbl_name, String tbl_sql) {
public static void Tbl_create(Db_conn p, String tbl_name, String tbl_sql) {
Db_qry qry = Db_qry_sql.ddl_(tbl_sql);
p.Exec_qry(qry);
}
public static void Tbl_delete_many(Db_provider p, String... tbls) {
public static void Tbl_delete_many(Db_conn p, String... tbls) {
int len = tbls.length;
for (int i = 0; i < len; i++)
Tbl_delete(p, tbls[i]);
}
public static void Tbl_delete(Db_provider p, String tbl) {
public static void Tbl_delete(Db_conn p, String tbl) {
Db_qry qry = Db_qry_sql.ddl_("DROP TABLE IF EXISTS " + tbl + ";");
p.Exec_qry(qry);
}
public static void Tbl_rename(Db_provider p, String src, String trg) {
public static void Tbl_rename(Db_conn p, String src, String trg) {
Db_qry qry = Db_qry_sql.ddl_(String_.Format("ALTER TABLE {0} RENAME TO {1};", src, trg));
p.Exec_qry(qry);
}
public static void Pragma_page_size_4096(Db_provider p) {Pragma_page_size(p, 4096);}
public static void Pragma_page_size(Db_provider p, int val) {
public static void Pragma_page_size_4096(Db_conn p) {Pragma_page_size(p, 4096);}
public static void Pragma_page_size(Db_conn p, int val) {
Db_qry qry = Db_qry_sql.ddl_("PRAGMA page_size = " + Int_.Xto_str(val) + ";");
p.Exec_qry(qry);
}
public static void Idx_create(Db_provider p, Db_idx_itm... idxs) {Idx_create(Gfo_usr_dlg_.Null, p, "", idxs);}
public static void Idx_create(Gfo_usr_dlg usr_dlg, Db_provider p, String file_id, Db_idx_itm... idxs) {
public static void Idx_create(Db_conn p, Db_idx_itm... idxs) {Idx_create(Gfo_usr_dlg_.Null, p, "", idxs);}
public static void Idx_create(Gfo_usr_dlg usr_dlg, Db_conn p, String file_id, Db_idx_itm... idxs) {
int len = idxs.length;
p.Txn_mgr().Txn_end_all(); // commit any pending transactions
for (int i = 0; i < len; i++) {
@@ -65,18 +65,18 @@ public class Sqlite_engine_ {
usr_dlg.Log_many("", "", "index created: ~{0} ~{1}", file_id, index);
}
}
public static Db_provider Provider_load_or_fail_(Io_url url) {
public static Db_conn Conn_load_or_fail_(Io_url url) {
boolean exists = Io_mgr._.ExistsFil(url);
if (!exists) throw Err_.new_fmt_("db does not exist; url=~{0}", url.Raw());
Db_conn_info connect = Db_conn_info__sqlite.load_(url);
return Db_provider_.new_and_open_(connect);
Db_url connect = Db_url__sqlite.load_(url);
return Db_conn_.new_and_open_(connect);
}
public static Db_provider Provider_load_or_make_(Io_url url) {return Provider_load_or_make_(url, Bool_obj_ref.n_());}
public static Db_provider Provider_load_or_make_(Io_url url, Bool_obj_ref created) {
public static Db_conn Conn_load_or_make_(Io_url url) {return Conn_load_or_make_(url, Bool_obj_ref.n_());}
public static Db_conn Conn_load_or_make_(Io_url url, Bool_obj_ref created) {
boolean exists = Io_mgr._.ExistsFil(url);
created.Val_(!exists);
Db_conn_info connect = exists ? Db_conn_info__sqlite.load_(url) : Db_conn_info__sqlite.make_(url);
Db_provider p = Db_provider_.new_and_open_(connect);
Db_url connect = exists ? Db_url__sqlite.load_(url) : Db_url__sqlite.make_(url);
Db_conn p = Db_conn_.new_and_open_(connect);
if (!exists)
Pragma_page_size(p, 4096);
return p;

View File

@@ -20,24 +20,24 @@ import org.junit.*;
public class db_CrudOps_tst {
CrudOpsFxt fx = new CrudOpsFxt();
@Test public void Mysql() {if (Tfds.SkipDb) return;
fx.RunAll(Db_provider_fxt.Mysql());
fx.RunAll(Db_conn_fxt.Mysql());
}
@Test public void Tdb() {if (Tfds.SkipDb) return;
fx.RunAll(Db_provider_fxt.Tdb("100_dbs_crud_ops.dsv"));
fx.RunAll(Db_conn_fxt.Tdb("100_dbs_crud_ops.dsv"));
}
@Test public void Postgres() {if (Db_provider_fxt.SkipPostgres) return;
fx.RunAll(Db_provider_fxt.Postgres());
@Test public void Postgres() {if (Db_conn_fxt.SkipPostgres) return;
fx.RunAll(Db_conn_fxt.Postgres());
}
@Test public void Sqlite() {if (Tfds.SkipDb) return;
fx.Fx().DmlAffectedAvailable_(false);
fx.RunAll(Db_provider_fxt.Sqlite());
fx.RunAll(Db_conn_fxt.Sqlite());
}
}
class CrudOpsFxt {
public Db_provider_fxt Fx() {return fx;} Db_provider_fxt fx = new Db_provider_fxt();
public Db_conn_fxt Fx() {return fx;} Db_conn_fxt fx = new Db_conn_fxt();
void Init() {fx.ini_DeleteAll("dbs_crud_ops");}
public void RunAll(Db_provider provider) {
fx.Provider_(provider);
public void RunAll(Db_conn conn) {
fx.Conn_(conn);
Insert_hook();
UpdateOne_hook();
UpdateMany_hook();
@@ -125,5 +125,5 @@ class CrudOpsFxt {
Tfds.Eq(val, ExecRdr_val(Db_qry_.select_val_("dbs_crud_ops", "name", Db_crt_.eq_("id", 3))));
Tfds.Eq(val, ExecRdr_val(Db_qry_.select_val_("dbs_crud_ops", "name", Db_crt_.eq_("name", "\\"))));
}
String ExecRdr_val(Db_qry_select select) {return (String)select.ExecRdr_val(fx.Provider());}
String ExecRdr_val(Db_qry_select select) {return (String)select.ExecRdr_val(fx.Conn());}
}

View File

@@ -21,19 +21,19 @@ public class db_DataTypes_tst {
DataTypes_base_fxt fx = new DataTypes_base_fxt();
@Test public void Mysql() {if (Tfds.SkipDb) return;
fx.Select_FloatStr_("0.333333");
fx.RunAll(Db_provider_fxt.Mysql());
fx.RunAll(Db_conn_fxt.Mysql());
}
@Test public void Tdb() {if (Tfds.SkipDb) return;
fx.Select_FloatStr_(Float_.Xto_str(Float_.Div(1, 3)));
fx.RunAll(Db_provider_fxt.Tdb("110_dbs_multiple_data_types.dsv"));
fx.RunAll(Db_conn_fxt.Tdb("110_dbs_multiple_data_types.dsv"));
}
@Test public void Postgres() {if (Db_provider_fxt.SkipPostgres) return;
@Test public void Postgres() {if (Db_conn_fxt.SkipPostgres) return;
fx.Select_FloatStr_("0.33333334");
fx.RunAll(Db_provider_fxt.Postgres());
fx.RunAll(Db_conn_fxt.Postgres());
}
@Test public void Sqlite() {if (Tfds.SkipDb) return;
fx.Select_FloatStr_("0.33333334");
fx.RunAll(Db_provider_fxt.Sqlite());
fx.RunAll(Db_conn_fxt.Sqlite());
}
/*
DROP TABLE dbs_multiple_data_types;
@@ -49,17 +49,17 @@ INSERT INTO dbs_multiple_data_types VALUES (1, 'John Doe', B'1', '3/30/2006 10:2
*/
}
class DataTypes_base_fxt {
public Db_provider Provider() {return provider;} Db_provider provider;
public Db_conn Conn() {return conn;} Db_conn conn;
public DataTypes_base_fxt() {}
public void Rls() {provider.Conn_term();}
public void Rls() {conn.Conn_term();}
public String Select_FloatStr() {return select_FloatStr;} public DataTypes_base_fxt Select_FloatStr_(String v) {select_FloatStr = v; return this;} private String select_FloatStr;
public void RunAll(Db_provider provider) {
this.provider = provider;
public void RunAll(Db_conn conn) {
this.conn = conn;
this.Select_hook(select_FloatStr);
provider.Conn_term();
conn.Conn_term();
}
public void Select_hook(String floatStr) {
DataRdr rdr = Db_qry_.select_tbl_("dbs_multiple_data_types").Exec_qry_as_rdr(provider);
DataRdr rdr = Db_qry_.select_tbl_("dbs_multiple_data_types").Exec_qry_as_rdr(conn);
rdr.MoveNextPeer();
Tfds.Eq(rdr.ReadInt("unique_id"), 1);
@@ -70,9 +70,9 @@ class DataTypes_base_fxt {
Tfds.Eq_decimal(rdr.ReadDecimal("amount"), DecimalAdp_.parts_(12, 345));
}
public void UpdateDate_hook() {
provider.Exec_qry(Db_qry_.update_("dbs_multiple_data_types", Db_crt_.eq_("unique_id", 1)).Arg_obj_("last_update", DateAdpClassXtn._.XtoDb(DateAdp_.parse_gplx("20091115 220000.000"))));
conn.Exec_qry(Db_qry_.update_("dbs_multiple_data_types", Db_crt_.eq_("unique_id", 1)).Arg_obj_("last_update", DateAdpClassXtn._.XtoDb(DateAdp_.parse_gplx("20091115 220000.000"))));
DataRdr rdr = Db_qry_.select_tbl_("dbs_multiple_data_types").Exec_qry_as_rdr(provider);
DataRdr rdr = Db_qry_.select_tbl_("dbs_multiple_data_types").Exec_qry_as_rdr(conn);
rdr.MoveNextPeer();
Tfds.Eq_date(rdr.ReadDate("last_update"), DateAdp_.parse_gplx("20091115 220000.000"));
}