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-03-01 21:59:12 -05:00
parent f495595da4
commit d279c70606
346 changed files with 3516 additions and 2970 deletions

View File

@@ -34,10 +34,11 @@ public class Db_conn {
public Db_stmt Stmt_select(String tbl, String[] cols, String... where) {return engine.New_stmt_prep(Db_qry__select_in_tbl.new_(tbl, where, cols));}
public Db_stmt Stmt_select(String tbl, Db_meta_fld_list flds, String... where) {return engine.New_stmt_prep(Db_qry__select_in_tbl.new_(tbl, where, flds.To_str_ary()));}
public void Exec_create_tbl_and_idx(Db_meta_tbl meta) {
engine.Exec_create_tbl(meta);
engine.Exec_create_idx(Gfo_usr_dlg_.Null, meta.Idxs());
engine.Exec_ddl_create_tbl(meta);
engine.Exec_ddl_create_idx(Gfo_usr_dlg_.Null, meta.Idxs());
}
public void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... idxs) {engine.Exec_create_idx(usr_dlg, idxs);}
public void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... idxs) {engine.Exec_ddl_create_idx(usr_dlg, idxs);}
public void Exec_ddl_append_fld(String tbl, Db_meta_fld fld) {engine.Exec_ddl_append_fld(tbl, fld);}
public Db_stmt Rls_reg(Db_stmt stmt) {rls_list.Add(stmt); return stmt;}
public void Conn_term() {
int len = rls_list.Count();

View File

@@ -17,9 +17,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.dbs; import gplx.*;
public class Db_meta_fld {
public Db_meta_fld(String name, int tid, int len, boolean nullable, boolean primary, boolean autoincrement) {
public Db_meta_fld(String name, int tid, int len, boolean nullable, boolean primary, boolean autoincrement, Object default_value) {
this.name = name; this.tid = tid; this.len = len;
this.nullable = nullable; this.primary = primary; this.autoincrement = autoincrement;
this.nullable = nullable; this.primary = primary; this.autoincrement = autoincrement; this.default_value = default_value;
}
public int Tid() {return tid;} private final int tid;
public String Name() {return name;} private final String name;
@@ -27,7 +27,9 @@ public class Db_meta_fld {
public boolean Nullable() {return nullable;} private final boolean nullable;
public boolean Primary() {return primary;} private final boolean primary;
public boolean Autoincrement() {return autoincrement;} private final boolean autoincrement;
public Object Default_value() {return default_value;} private final Object default_value;
public static final int Tid_bool = 0, Tid_byte = 1, Tid_short = 2, Tid_int = 3, Tid_long = 4, Tid_float = 5, Tid_double = 6, Tid_str = 7, Tid_text = 8, Tid_bry = 9;
public static final String[] Ary_empy = String_.Ary_empty;
public static final String Key_null = null;
public static final String[] Ary_empy = String_.Ary_empty;
public static final Object Default_value_null = null;
}

View File

@@ -40,20 +40,23 @@ public class Db_meta_fld_list {
}
return rv.XtoStrAry();
}
public String Add_bool(String name) {return Add(name, Db_meta_fld.Tid_bool, Len_null, Bool_.N, Bool_.N, Bool_.N);}
public String Add_byte(String name) {return Add(name, Db_meta_fld.Tid_byte, Len_null, Bool_.N, Bool_.N, Bool_.N);}
public String Add_short(String name) {return Add(name, Db_meta_fld.Tid_short, Len_null, Bool_.N, Bool_.N, Bool_.N);}
public String Add_int(String name) {return Add(name, Db_meta_fld.Tid_int, Len_null, Bool_.N, Bool_.N, Bool_.N);}
public String Add_int_pkey(String name) {return Add(name, Db_meta_fld.Tid_int, Len_null, Bool_.N, Bool_.Y, Bool_.N);}
public String Add_int_pkey_autonum(String name) {return Add(name, Db_meta_fld.Tid_int, Len_null, Bool_.N, Bool_.Y, Bool_.Y);}
public String Add_long(String name) {return Add(name, Db_meta_fld.Tid_long, Len_null, Bool_.N, Bool_.N, Bool_.N);}
public String Add_float(String name) {return Add(name, Db_meta_fld.Tid_float, Len_null, Bool_.N, Bool_.N, Bool_.N);}
public String Add_double(String name) {return Add(name, Db_meta_fld.Tid_double, Len_null, Bool_.N, Bool_.N, Bool_.N);}
public String Add_str(String name, int len) {return Add(name, Db_meta_fld.Tid_str, len, Bool_.N, Bool_.N, Bool_.N);}
public String Add_text(String name) {return Add(name, Db_meta_fld.Tid_text, Len_null, Bool_.N, Bool_.N, Bool_.N);}
public String Add_bry(String name) {return Add(name, Db_meta_fld.Tid_bry, Len_null, Bool_.N, Bool_.N, Bool_.N);}
public String Add(String name, int tid, int len, boolean nullable, boolean primary, boolean autoincrement) {
Db_meta_fld fld = new Db_meta_fld(name, tid, len, nullable, primary, autoincrement);
public String Add_bool(String name) {return Add(name, Db_meta_fld.Tid_bool, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);}
public String Add_byte(String name) {return Add(name, Db_meta_fld.Tid_byte, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);}
public String Add_short(String name) {return Add(name, Db_meta_fld.Tid_short, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);}
public String Add_int(String name) {return Add(name, Db_meta_fld.Tid_int, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);}
public String Add_int_pkey(String name) {return Add(name, Db_meta_fld.Tid_int, Len_null, Bool_.N, Bool_.Y, Bool_.N, Db_meta_fld.Default_value_null);}
public String Add_int_pkey_autonum(String name) {return Add(name, Db_meta_fld.Tid_int, Len_null, Bool_.N, Bool_.Y, Bool_.Y, Db_meta_fld.Default_value_null);}
public String Add_int_dflt(String name, int dflt) {return Add(name, Db_meta_fld.Tid_int, Len_null, Bool_.N, Bool_.N, Bool_.N, dflt);}
public String Add_long(String name) {return Add(name, Db_meta_fld.Tid_long, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);}
public String Add_float(String name) {return Add(name, Db_meta_fld.Tid_float, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);}
public String Add_double(String name) {return Add(name, Db_meta_fld.Tid_double, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);}
public String Add_str(String name, int len) {return Add(name, Db_meta_fld.Tid_str, len, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);}
public String Add_str_dflt(String name, int len, String dflt)
{return Add(name, Db_meta_fld.Tid_str, len, Bool_.N, Bool_.N, Bool_.N, dflt);}
public String Add_text(String name) {return Add(name, Db_meta_fld.Tid_text, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);}
public String Add_bry(String name) {return Add(name, Db_meta_fld.Tid_bry, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);}
public String Add(String name, int tid, int len, boolean nullable, boolean primary, boolean autoincrement, Object default_value) {
Db_meta_fld fld = new Db_meta_fld(name, tid, len, nullable, primary, autoincrement, default_value);
flds.Add(name, fld);
keys.Add(name);
return name;

View File

@@ -29,6 +29,7 @@ public interface Db_engine {
void Conn_open();
void Conn_term();
Object Exec_as_obj(Db_qry qry);
void Exec_create_tbl(Db_meta_tbl meta);
void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary);
void Exec_ddl_create_tbl(Db_meta_tbl meta);
void Exec_ddl_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary);
void Exec_ddl_append_fld(String tbl, Db_meta_fld fld);
}

View File

@@ -53,8 +53,8 @@ public abstract class Db_engine_sql_base implements Db_engine {
}
catch (Exception exc) {throw Err_.err_(exc, "exec reader failed").Add("sql", sql).Add("err", Err_.Message_gplx_brief(exc));}
}
public void Exec_create_tbl(Db_meta_tbl meta) {Exec_as_int(meta.To_sql_create());}
public void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {
public void Exec_ddl_create_tbl(Db_meta_tbl meta) {Exec_as_int(meta.To_sql_create());}
public void Exec_ddl_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {
int len = ary.length;
for (int i = 0; i < len; ++i) {
Db_meta_idx idx = ary[i];
@@ -62,6 +62,9 @@ public abstract class Db_engine_sql_base implements Db_engine {
Exec_as_int(idx.To_sql_create());
}
}
public void Exec_ddl_append_fld(String tbl, Db_meta_fld fld) {
Exec_as_int(Db_sqlbldr__sqlite.I.Bld_alter_tbl_add(tbl, fld));
}
@gplx.Virtual public DataRdr New_rdr(ResultSet rdr, String sql) {return gplx.stores.Db_data_rdr_.new_(rdr, sql);}
@gplx.Virtual public Sql_qry_wtr SqlWtr() {return Sql_qry_wtr_.new_ansi();}
@gplx.Internal protected abstract Connection Conn_new();

View File

@@ -34,10 +34,11 @@ public class Db_engine__mem implements Db_engine {
public Db_rdr New_rdr_by_obj(Object rdr, String sql) {throw Err_.not_implemented_();}
public DataRdr New_rdr(java.sql.ResultSet rdr, String sql) {throw Err_.not_implemented_();}
public Object New_stmt_prep_as_obj(String sql) {throw Err_.not_implemented_();}
public void Exec_create_tbl(Db_meta_tbl meta) {
public void Exec_ddl_create_tbl(Db_meta_tbl meta) {
Mem_tbl mem_tbl = new Mem_tbl();
tbl_hash.AddReplace(meta.Name(), mem_tbl);
}
public void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {} // TODO: implement unique index
public void Exec_ddl_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {} // TODO: implement unique index
public void Exec_ddl_append_fld(String tbl, Db_meta_fld fld) {}
public static final Db_engine__mem _ = new Db_engine__mem(); Db_engine__mem() {}
}

View File

@@ -29,7 +29,8 @@ public class Null_engine implements Db_engine {
public void Txn_bgn() {}
public void Txn_end() {}
public Object Exec_as_obj(Db_qry cmd) {return cmd.Exec_is_rdr() ? (Object)DataRdr_.Null : -1;}
public void Exec_create_tbl(Db_meta_tbl meta) {}
public void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {}
public void Exec_ddl_create_tbl(Db_meta_tbl meta) {}
public void Exec_ddl_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {}
public void Exec_ddl_append_fld(String tbl, Db_meta_fld fld) {}
public static final Null_engine _ = new Null_engine(); Null_engine() {}
}

View File

@@ -54,8 +54,10 @@ public class TdbEngine implements Db_engine {
public void FlushTbl(TdbTable tbl) {
saveMgr.SaveFile(db, tbl.File());
}
public void Exec_create_tbl(Db_meta_tbl meta) {throw Err_.not_implemented_();}
public void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {throw Err_.not_implemented_();}
public void Exec_ddl_create_tbl(Db_meta_tbl meta) {throw Err_.not_implemented_();}
public void Exec_ddl_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {throw Err_.not_implemented_();}
public void Exec_ddl_append_fld(String tbl, Db_meta_fld fld) {throw Err_.not_implemented_();}
HashAdp wkrs = HashAdp_.new_(); TdbDbLoadMgr loadMgr = TdbDbLoadMgr.new_(); TdbDbSaveMgr saveMgr = TdbDbSaveMgr.new_();
public static final TdbEngine _ = new TdbEngine();

View File

@@ -40,24 +40,44 @@ public class Db_sqlbldr__sqlite implements Db_sqlbldr {
return tmp_bfr.Xto_str_and_clear();
}
public String Bld_create_tbl(Db_meta_tbl tbl) {
tmp_bfr.Add_str_ascii("CREATE TABLE ").Add_str_ascii(tbl.Name()).Add_byte_nl();
tmp_bfr.Add_str_ascii("CREATE TABLE IF NOT EXISTS ").Add_str_ascii(tbl.Name()).Add_byte_nl();
Db_meta_fld[] flds = tbl.Flds();
int flds_len = flds.length;
for (int i = 0; i < flds_len; ++i) {
Db_meta_fld fld = flds[i];
tmp_bfr.Add_byte(i == 0 ? Byte_ascii.Paren_bgn : Byte_ascii.Comma).Add_byte_space();
tmp_bfr.Add_str_ascii(fld.Name()).Add_byte_space();
Tid_to_sql(tmp_bfr, fld.Tid(), fld.Len()); tmp_bfr.Add_byte_space();
tmp_bfr.Add_str_ascii(fld.Nullable() ? "NULL " : "NOT NULL ");
if (fld.Primary()) tmp_bfr.Add_str_ascii("PRIMARY KEY ");
if (fld.Autoincrement()) tmp_bfr.Add_str_ascii("AUTOINCREMENT ");
tmp_bfr.Del_by_1(); // remove trailing space
Bld_fld(tmp_bfr, fld);
tmp_bfr.Add_byte_nl();
}
tmp_bfr.Add_str_ascii(");");
return tmp_bfr.Xto_str_and_clear();
}
public void Tid_to_sql(Bry_bfr tmp_bfr, int tid, int len) {// REF: https://www.sqlite.org/datatype3.html
public String Bld_alter_tbl_add(String tbl, Db_meta_fld fld) {
tmp_bfr.Add_str_ascii("ALTER TABLE ").Add_str_ascii(tbl).Add_str_ascii(" ADD ");
Bld_fld(tmp_bfr, fld);
tmp_bfr.Add_byte_semic();
return tmp_bfr.Xto_str_and_clear();
}
private void Bld_fld(Bry_bfr tmp_bfr, Db_meta_fld fld) {
tmp_bfr.Add_str_ascii(fld.Name()).Add_byte_space();
Tid_to_sql(tmp_bfr, fld.Tid(), fld.Len()); tmp_bfr.Add_byte_space();
tmp_bfr.Add_str_ascii(fld.Nullable() ? "NULL " : "NOT NULL ");
if (fld.Default_value() != Db_meta_fld.Default_value_null) {
tmp_bfr.Add_str_ascii("DEFAULT ");
boolean quote = Bool_.N;
switch (fld.Tid()) {
case Db_meta_fld.Tid_str: case Db_meta_fld.Tid_text: quote = Bool_.Y; break;
}
if (quote) tmp_bfr.Add_byte_apos();
tmp_bfr.Add_str_utf8(Object_.Xto_str_strict_or_null(fld.Default_value()));
if (quote) tmp_bfr.Add_byte_apos();
tmp_bfr.Add_byte_space();
}
if (fld.Primary()) tmp_bfr.Add_str_ascii("PRIMARY KEY ");
if (fld.Autoincrement()) tmp_bfr.Add_str_ascii("AUTOINCREMENT ");
tmp_bfr.Del_by_1(); // remove trailing space
}
public static void Tid_to_sql(Bry_bfr tmp_bfr, int tid, int len) {// REF: https://www.sqlite.org/datatype3.html
switch (tid) {
case Db_meta_fld.Tid_bool: tmp_bfr.Add_str_ascii("boolean"); break;
case Db_meta_fld.Tid_byte: tmp_bfr.Add_str_ascii("tinyint"); break;

View File

@@ -38,7 +38,7 @@ public class Db_sqlbldr_tst {
flds.Add_bry("fld_bry");
fxt.Test_create_tbl(Db_meta_tbl.new_("tbl_name", flds.To_fld_ary())
, String_.Concat_lines_nl_skip_last
( "CREATE TABLE tbl_name"
( "CREATE TABLE IF NOT EXISTS tbl_name"
, "( fld_int_pkey integer NOT NULL PRIMARY KEY"
, ", fld_bool boolean NOT NULL"
, ", fld_short smallint NOT NULL"
@@ -52,13 +52,17 @@ public class Db_sqlbldr_tst {
, ");"
));
}
@Test public void Tbl_alter_tbl_add() {
Db_meta_fld_list flds = Db_meta_fld_list.new_();
flds.Add_int_dflt("fld_int", -1);
flds.Add_str_dflt("fld_str", 255, "a");
fxt.Test_alter_tbl_add("tbl_name", flds.Get_by("fld_int"), "ALTER TABLE tbl_name ADD fld_int integer NOT NULL DEFAULT -1;");
fxt.Test_alter_tbl_add("tbl_name", flds.Get_by("fld_str"), "ALTER TABLE tbl_name ADD fld_str varchar(255) NOT NULL DEFAULT 'a';");
}
}
class Db_sqlbldr_fxt {
private Db_sqlbldr__sqlite sqlbldr = Db_sqlbldr__sqlite.I;
public void Test_create_idx(Db_meta_idx idx, String expd) {
Tfds.Eq(expd, sqlbldr.Bld_create_idx(idx));
}
public void Test_create_tbl(Db_meta_tbl tbl, String expd) {
Tfds.Eq_str_lines(expd, sqlbldr.Bld_create_tbl(tbl));
}
public void Test_create_idx(Db_meta_idx idx, String expd) {Tfds.Eq(expd, sqlbldr.Bld_create_idx(idx));}
public void Test_create_tbl(Db_meta_tbl tbl, String expd) {Tfds.Eq_str_lines(expd, sqlbldr.Bld_create_tbl(tbl));}
public void Test_alter_tbl_add(String tbl, Db_meta_fld fld, String expd) {Tfds.Eq_str_lines(expd, sqlbldr.Bld_alter_tbl_add(tbl, fld));}
}

View File

@@ -20,7 +20,7 @@ import gplx.core.strings.*; import gplx.core.criterias.*;
import gplx.dbs.qrys.*;
public class Sql_qry_wtr_ansi implements Sql_qry_wtr {
private final String_bldr sb = String_bldr_.new_();
private boolean prepare = false;
public boolean prepare = false;
public String Xto_str(Db_qry cmd, boolean prepare) {
synchronized (sb) {
this.prepare = prepare;

View File

@@ -18,6 +18,17 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package gplx.dbs.utls; import gplx.*; import gplx.dbs.*;
class Db_sys_regy_tbl {
private final String tbl_name;
private static final Db_meta_fld_list Flds = Db_meta_fld_list.new_();
private static final String
Fld_regy_grp = Flds.Add_str("regy_grp", 1024)
, Fld_regy_key = Flds.Add_str("regy_key", 1024)
, Fld_regy_val = Flds.Add_str("regy_val", 4096)
;
public static Db_meta_tbl new_meta(String tbl) {
return Db_meta_tbl.new_(tbl, Flds.To_fld_ary()
, Db_meta_idx.new_unique_by_tbl(tbl, "key", Flds.To_str_ary())
);
}
private Db_meta_tbl meta;
private Db_conn conn;
public Db_sys_regy_tbl(Db_url url, String tbl_name) {
@@ -46,15 +57,4 @@ class Db_sys_regy_tbl {
return rdr.Move_next() ? rdr.Read_str(Fld_regy_val) : or;
} finally {rdr.Rls();}
}
private static final Db_meta_fld_list Flds = Db_meta_fld_list.new_();
private static final String
Fld_regy_grp = Flds.Add_str("regy_grp", 1024)
, Fld_regy_key = Flds.Add_str("regy_key", 1024)
, Fld_regy_val = Flds.Add_str("regy_val", 4096)
;
public static Db_meta_tbl new_meta(String tbl) {
return Db_meta_tbl.new_(tbl, Flds.To_fld_ary()
, Db_meta_idx.new_unique_by_tbl(tbl, "key", Flds.To_str_ary())
);
}
}