mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
v2.5.4.1
This commit is contained in:
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.dbs; import gplx.*;
|
||||
import gplx.dbs.engines.*; import gplx.dbs.qrys.*;
|
||||
public class Db_conn {
|
||||
private final ListAdp rls_list = ListAdp_.new_(); private final Db_engine engine;
|
||||
private final List_adp rls_list = List_adp_.new_(); private final Db_engine engine;
|
||||
public Db_conn(Db_engine engine) {this.engine = engine;}
|
||||
public Db_conn_info Conn_info() {return engine.Conn_info();}
|
||||
public void Txn_bgn() {engine.Txn_bgn("");}
|
||||
@@ -48,7 +48,7 @@ public class Db_conn {
|
||||
public void Rls_conn() {
|
||||
int len = rls_list.Count();
|
||||
for (int i = 0; i < len; ++i) {
|
||||
RlsAble itm = (RlsAble)rls_list.FetchAt(i);
|
||||
RlsAble itm = (RlsAble)rls_list.Get_at(i);
|
||||
itm.Rls();
|
||||
}
|
||||
engine.Conn_term();
|
||||
|
||||
@@ -25,14 +25,14 @@ public interface Db_conn_bldr_wkr {
|
||||
}
|
||||
class Db_conn_bldr_wkr__sqlite implements Db_conn_bldr_wkr {
|
||||
public void Clear_for_tests() {}
|
||||
public boolean Exists(Io_url url) {return Io_mgr._.ExistsFil(url);}
|
||||
public boolean Exists(Io_url url) {return Io_mgr.I.ExistsFil(url);}
|
||||
public Db_conn Get(Io_url url) {
|
||||
if (!Io_mgr._.ExistsFil(url)) return null;
|
||||
if (!Io_mgr.I.ExistsFil(url)) return null;
|
||||
Db_conn_info db_url = Db_conn_info_.sqlite_(url);
|
||||
return Db_conn_pool.I.Get_or_new(db_url);
|
||||
}
|
||||
public Db_conn New(Io_url url) {
|
||||
Io_mgr._.CreateDirIfAbsent(url.OwnerDir()); // must assert that dir exists
|
||||
Io_mgr.I.CreateDirIfAbsent(url.OwnerDir()); // must assert that dir exists
|
||||
Db_conn_info db_url = Sqlite_conn_info.make_(url);
|
||||
Db_conn conn = Db_conn_pool.I.Get_or_new(db_url);
|
||||
Sqlite_engine_.Pragma_page_size(conn, 4096);
|
||||
@@ -42,7 +42,7 @@ class Db_conn_bldr_wkr__sqlite implements Db_conn_bldr_wkr {
|
||||
public static final Db_conn_bldr_wkr__sqlite I = new Db_conn_bldr_wkr__sqlite(); Db_conn_bldr_wkr__sqlite() {}
|
||||
}
|
||||
class Db_conn_bldr_wkr__mem implements Db_conn_bldr_wkr {
|
||||
private final HashAdp hash = HashAdp_.new_();
|
||||
private final Hash_adp hash = Hash_adp_.new_();
|
||||
public void Clear_for_tests() {hash.Clear(); Db_conn_pool.I.Clear();}
|
||||
public boolean Exists(Io_url url) {
|
||||
String io_url_str = url.Xto_api();
|
||||
|
||||
@@ -28,12 +28,12 @@ public class Db_conn_info_ {
|
||||
public static final String Key_tdb = Tdb_conn_info.Tid_const;
|
||||
}
|
||||
class Db_conn_info_pool {
|
||||
private OrderedHash regy = OrderedHash_.new_();
|
||||
private Ordered_hash regy = Ordered_hash_.new_();
|
||||
public Db_conn_info_pool() {
|
||||
this.Add(Null_conn_info._).Add(Tdb_conn_info._).Add(Mysql_conn_info._).Add(Postgres_conn_info._).Add(Sqlite_conn_info._);
|
||||
this.Add(Db_conn_info__mem.I);
|
||||
}
|
||||
public Db_conn_info_pool Add(Db_conn_info itm) {regy.AddReplace(itm.Tid(), itm); return this;}
|
||||
public Db_conn_info_pool Add(Db_conn_info itm) {regy.Add_if_dupe_use_nth(itm.Tid(), itm); return this;}
|
||||
public Db_conn_info Parse(String raw) {// assume each pair has format of: name=val;
|
||||
try {
|
||||
GfoMsg m = GfoMsg_.new_parse_("db_url");
|
||||
@@ -47,7 +47,7 @@ class Db_conn_info_pool {
|
||||
else
|
||||
m.Add(kv[0], kv[1]);
|
||||
}
|
||||
Db_conn_info prototype = (Db_conn_info)regy.Fetch(url_tid);
|
||||
Db_conn_info prototype = (Db_conn_info)regy.Get_by(url_tid);
|
||||
return prototype.New_self(raw, m);
|
||||
}
|
||||
catch(Exception exc) {throw Err_.parse_type_exc_(exc, Db_conn_info.class, raw);}
|
||||
|
||||
@@ -27,11 +27,11 @@ public abstract class Db_conn_info__base implements Db_conn_info {
|
||||
protected void Ctor(String server, String database, String raw, String api) {this.server = server; this.database = database; this.raw = raw; this.api = api;}
|
||||
protected static String BldApi(GfoMsg m, KeyVal... xtnAry) {
|
||||
String_bldr sb = String_bldr_.new_();
|
||||
HashAdp hash = HashAdp_.new_();
|
||||
Hash_adp hash = Hash_adp_.new_();
|
||||
for (int i = 0; i < m.Args_count(); i++) {
|
||||
KeyVal kv = m.Args_getAt(i);
|
||||
sb.Add_fmt("{0}={1};", kv.Key(), kv.Val_to_str_or_empty());
|
||||
hash.AddKeyVal(kv.Key());
|
||||
hash.Add_as_key_and_val(kv.Key());
|
||||
}
|
||||
for (KeyVal xtn : xtnAry) {
|
||||
if (hash.Has(xtn.Key())) continue;
|
||||
@@ -44,7 +44,7 @@ public abstract class Db_conn_info__base implements Db_conn_info {
|
||||
int len = ary.length;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
String itm = ary[i];
|
||||
bfr.Add_str_utf8(itm);
|
||||
bfr.Add_str_u8(itm);
|
||||
bfr.Add_byte(i % 2 == 0 ? Byte_ascii.Eq : Byte_ascii.Semic);
|
||||
}
|
||||
return bfr.Xto_str();
|
||||
|
||||
@@ -19,16 +19,16 @@ package gplx.dbs; import gplx.*;
|
||||
import gplx.dbs.engines.*; import gplx.dbs.engines.nulls.*; import gplx.dbs.engines.mems.*; import gplx.dbs.engines.tdbs.*;
|
||||
import gplx.dbs.engines.sqlite.*; import gplx.dbs.engines.mysql.*; import gplx.dbs.engines.postgres.*;
|
||||
public class Db_conn_pool {
|
||||
private final HashAdp conn_hash = HashAdp_.new_(); private final HashAdp engine_hash = HashAdp_.new_();
|
||||
private final Hash_adp conn_hash = Hash_adp_.new_(); private final Hash_adp engine_hash = Hash_adp_.new_();
|
||||
public void Clear() {conn_hash.Clear();}
|
||||
public void Del(Db_conn_info url) {conn_hash.Del(url.Xto_api());}
|
||||
public Db_conn Get_or_new__mem(String db) {return Get_or_new(Db_conn_info__mem.new_(db));}
|
||||
public Db_conn Get_or_new__sqlite(Io_url url) {return Get_or_new(Db_conn_info_.sqlite_(url));}
|
||||
public Db_conn Get_or_new(String s) {return Get_or_new(Db_conn_info_.parse_(s));}
|
||||
public Db_conn Get_or_new(Db_conn_info url) {
|
||||
Db_conn rv = (Db_conn)conn_hash.Fetch(url.Xto_api());
|
||||
Db_conn rv = (Db_conn)conn_hash.Get_by(url.Xto_api());
|
||||
if (rv == null) {
|
||||
Db_engine prime = (Db_engine)engine_hash.Fetch(url.Tid()); if (prime == null) throw Err_.new_("db engine prototype not found; tid={0}", url.Tid());
|
||||
Db_engine prime = (Db_engine)engine_hash.Get_by(url.Tid()); if (prime == null) throw Err_.new_("db engine prototype not found; tid={0}", url.Tid());
|
||||
Db_engine clone = prime.New_clone(url);
|
||||
rv = new Db_conn(clone);
|
||||
conn_hash.Add(url.Xto_api(), rv);
|
||||
|
||||
@@ -17,25 +17,25 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.dbs; import gplx.*;
|
||||
public class Db_meta_fld_list {
|
||||
private final OrderedHash flds = OrderedHash_.new_();
|
||||
private final ListAdp keys = ListAdp_.new_();
|
||||
private final Ordered_hash flds = Ordered_hash_.new_();
|
||||
private final List_adp keys = List_adp_.new_();
|
||||
public void Clear() {flds.Clear(); keys.Clear();}
|
||||
public Db_meta_fld Get_by(String name) {return (Db_meta_fld)flds.Fetch(name);}
|
||||
public String[] To_str_ary() {if (str_ary == null) str_ary = (String[])keys.Xto_ary(String.class); return str_ary;} private String[] str_ary;
|
||||
public Db_meta_fld[] To_fld_ary() {if (fld_ary == null) fld_ary = (Db_meta_fld[])flds.Xto_ary(Db_meta_fld.class); return fld_ary;} private Db_meta_fld[] fld_ary;
|
||||
public Db_meta_fld Get_by(String name) {return (Db_meta_fld)flds.Get_by(name);}
|
||||
public String[] To_str_ary() {if (str_ary == null) str_ary = (String[])keys.To_ary(String.class); return str_ary;} private String[] str_ary;
|
||||
public Db_meta_fld[] To_fld_ary() {if (fld_ary == null) fld_ary = (Db_meta_fld[])flds.To_ary(Db_meta_fld.class); return fld_ary;} private Db_meta_fld[] fld_ary;
|
||||
public String[] To_str_ary_wo_autonum() {
|
||||
int len = flds.Count();
|
||||
ListAdp rv = ListAdp_.new_();
|
||||
List_adp rv = List_adp_.new_();
|
||||
for (int i = 0; i < len; ++i) {
|
||||
Db_meta_fld fld = (Db_meta_fld)flds.FetchAt(i);
|
||||
Db_meta_fld fld = (Db_meta_fld)flds.Get_at(i);
|
||||
if (fld.Autonum()) continue;
|
||||
rv.Add(fld.Name());
|
||||
}
|
||||
return (String[])rv.Xto_ary(String.class);
|
||||
return (String[])rv.To_ary(String.class);
|
||||
}
|
||||
public String[] To_str_ary_exclude(String[] ary) {
|
||||
HashAdp ary_hash = HashAdp_.new_();
|
||||
ListAdp rv = ListAdp_.new_();
|
||||
Hash_adp ary_hash = Hash_adp_.new_();
|
||||
List_adp rv = List_adp_.new_();
|
||||
int ary_len = ary.length;
|
||||
for (int i = 0; i < ary_len; ++i) {
|
||||
String ary_itm = ary[i];
|
||||
@@ -43,12 +43,12 @@ public class Db_meta_fld_list {
|
||||
}
|
||||
int fld_len = flds.Count();
|
||||
for (int i = 0; i < fld_len; ++i) {
|
||||
Db_meta_fld fld = (Db_meta_fld)flds.FetchAt(i);
|
||||
Db_meta_fld fld = (Db_meta_fld)flds.Get_at(i);
|
||||
String fld_key = fld.Name();
|
||||
if (ary_hash.Has(fld_key)) continue;
|
||||
rv.Add(fld_key);
|
||||
}
|
||||
return rv.XtoStrAry();
|
||||
return rv.To_str_ary();
|
||||
}
|
||||
public boolean Has(String key) {return flds.Has(key);}
|
||||
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);}
|
||||
|
||||
@@ -28,8 +28,8 @@ public class Db_rdr__basic implements Db_rdr {
|
||||
}
|
||||
@gplx.Virtual public byte[] Read_bry(int i) {try {return rdr.getBytes(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Bry_.Cls_val_name, Err_.Message_lang(e));}}
|
||||
@gplx.Virtual public byte[] Read_bry(String k) {try {return (byte[])rdr.getObject(k);} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Bry_.Cls_val_name, Err_.Message_lang(e));}}
|
||||
@gplx.Virtual public byte[] Read_bry_by_str(int i) {try {return Bry_.new_utf8_(rdr.getString(i + 1));} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, String_.Cls_val_name, Err_.Message_lang(e));}}
|
||||
@gplx.Virtual public byte[] Read_bry_by_str(String k) {try {return Bry_.new_utf8_((String)rdr.getObject(k));} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, String_.Cls_val_name, Err_.Message_lang(e));}}
|
||||
@gplx.Virtual public byte[] Read_bry_by_str(int i) {try {return Bry_.new_u8(rdr.getString(i + 1));} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, String_.Cls_val_name, Err_.Message_lang(e));}}
|
||||
@gplx.Virtual public byte[] Read_bry_by_str(String k) {try {return Bry_.new_u8((String)rdr.getObject(k));} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, String_.Cls_val_name, Err_.Message_lang(e));}}
|
||||
@gplx.Virtual public String Read_str(int i) {try {return rdr.getString(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, String_.Cls_val_name, Err_.Message_lang(e));}}
|
||||
@gplx.Virtual public String Read_str(String k) {try {return (String)rdr.getObject(k);} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, String_.Cls_val_name, Err_.Message_lang(e));}}
|
||||
@gplx.Virtual public DateAdp Read_date_by_str(int i) {return DateAdp_.parse_iso8561(Read_str(i));}
|
||||
|
||||
@@ -51,7 +51,7 @@ class Db_sql_col_ {
|
||||
public static Db_sql_col[] Ary(Db_sql_col... v) {return v;}
|
||||
}
|
||||
class Db_sql_col_bldr {
|
||||
private final ListAdp tmp_list = ListAdp_.new_();
|
||||
private final List_adp tmp_list = List_adp_.new_();
|
||||
public Db_sql_col[] new_fld_many(String[] ary) {
|
||||
tmp_list.Clear();
|
||||
int ord = -1;
|
||||
@@ -61,7 +61,7 @@ class Db_sql_col_bldr {
|
||||
Db_sql_col__name fld = new Db_sql_col__name(++ord, fld_key);
|
||||
tmp_list.Add(fld);
|
||||
}
|
||||
return (Db_sql_col[])tmp_list.Xto_ary_and_clear(Db_sql_col.class);
|
||||
return (Db_sql_col[])tmp_list.To_ary_and_clear(Db_sql_col.class);
|
||||
}
|
||||
public static final Db_sql_col_bldr I = new Db_sql_col_bldr(); Db_sql_col_bldr() {}
|
||||
}
|
||||
|
||||
@@ -17,13 +17,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.dbs.engines.mems; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*;
|
||||
public class Db_engine__mem implements Db_engine {
|
||||
private final HashAdp tbl_hash = HashAdp_.new_();
|
||||
private final Hash_adp tbl_hash = Hash_adp_.new_();
|
||||
Db_engine__mem(Db_conn_info conn_info) {this.conn_info = conn_info;}
|
||||
public String Tid() {return Db_conn_info__mem.Tid_const;}
|
||||
public Db_conn_info Conn_info() {return conn_info;} private Db_conn_info conn_info;
|
||||
public Db_engine New_clone(Db_conn_info conn_info) {return new Db_engine__mem(conn_info);}
|
||||
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.Fetch(name);}
|
||||
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 void Txn_cxl() {--txn_count;}
|
||||
@@ -39,7 +39,7 @@ public class Db_engine__mem implements Db_engine {
|
||||
public Object New_stmt_prep_as_obj(String sql) {throw Err_.not_implemented_();}
|
||||
public void Ddl_create_tbl(Db_meta_tbl meta) {
|
||||
Mem_tbl mem_tbl = new Mem_tbl(meta);
|
||||
tbl_hash.AddReplace(meta.Name(), mem_tbl);
|
||||
tbl_hash.Add_if_dupe_use_nth(meta.Name(), mem_tbl);
|
||||
}
|
||||
public void Ddl_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {} // TODO: implement unique index
|
||||
public void Ddl_append_fld(String tbl, Db_meta_fld fld) {}
|
||||
|
||||
@@ -32,8 +32,8 @@ public class Db_rdr__mem implements Db_rdr {
|
||||
public byte[] Read_bry(String k) {return (byte[])row.Get_by(k);}
|
||||
public String Read_str(int i) {return (String)row.Get_at(i);}
|
||||
public String Read_str(String k) {return (String)row.Get_by(k);}
|
||||
public byte[] Read_bry_by_str(int i) {return Bry_.new_utf8__null((String)row.Get_at(i));} // NOTE: null b/c db can have NULL
|
||||
public byte[] Read_bry_by_str(String k) {return Bry_.new_utf8__null((String)row.Get_by(k));} // NOTE: null b/c db can have NULL
|
||||
public byte[] Read_bry_by_str(int i) {return Bry_.new_u8_safe((String)row.Get_at(i));} // NOTE: null b/c db can have NULL
|
||||
public byte[] Read_bry_by_str(String k) {return Bry_.new_u8_safe((String)row.Get_by(k));} // NOTE: null b/c db can have NULL
|
||||
public DateAdp Read_date_by_str(int i) {return DateAdp_.parse_iso8561((String)row.Get_at(i));}
|
||||
public DateAdp Read_date_by_str(String k) {return DateAdp_.parse_iso8561((String)row.Get_by(k));}
|
||||
public byte Read_byte(int i) {return Byte_.cast_(row.Get_at(i));}
|
||||
|
||||
@@ -18,13 +18,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.dbs.engines.mems; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*;
|
||||
public class Db_stmt__mem implements Db_stmt {
|
||||
private static final String Key_na = ""; // key is not_available; only called by procs with signature of Val(<type> v);
|
||||
private final OrderedHash val_list = OrderedHash_.new_();
|
||||
private final Ordered_hash val_list = Ordered_hash_.new_();
|
||||
public Db_stmt__mem(Db_engine__mem engine, Db_qry qry) {Ctor_stmt(engine, qry);} private Db_engine__mem engine;
|
||||
public void Ctor_stmt(Db_engine engine, Db_qry qry) {this.engine = (Db_engine__mem)engine; this.qry = qry;}
|
||||
public HashAdp Crts() {return crt_hash;} private final HashAdp crt_hash = HashAdp_.new_();
|
||||
public Hash_adp Crts() {return crt_hash;} private final Hash_adp crt_hash = Hash_adp_.new_();
|
||||
public int Args_len() {return val_list.Count();}
|
||||
public Object Args_get_at(int i) {return val_list.FetchAt(i);}
|
||||
public Object Args_get_by(String k) {return val_list.Fetch(k);}
|
||||
public Object Args_get_at(int i) {return val_list.Get_at(i);}
|
||||
public Object Args_get_by(String k) {return val_list.Get_by(k);}
|
||||
public Db_qry Qry() {return qry;} private Db_qry qry;
|
||||
public Db_stmt Reset_stmt() {return this;}
|
||||
public Db_stmt Clear() {
|
||||
@@ -89,7 +89,7 @@ public class Db_stmt__mem implements Db_stmt {
|
||||
public Db_stmt Crt_bry_as_str(String k, byte[] v) {return Add_bry_as_str(Bool_.Y, k, v);}
|
||||
public Db_stmt Val_bry_as_str(String k, byte[] v) {return Add_bry_as_str(Bool_.N, k, v);}
|
||||
public Db_stmt Val_bry_as_str(byte[] v) {return Add_bry_as_str(Bool_.N, Key_na, v);}
|
||||
private Db_stmt Add_bry_as_str(boolean where, String k, byte[] v) {return Add_str(where, k, String_.new_utf8_(v));}
|
||||
private Db_stmt Add_bry_as_str(boolean where, String k, byte[] v) {return Add_str(where, k, String_.new_u8(v));}
|
||||
public Db_stmt Crt_str(String k, String v) {return Add_str(Bool_.Y, k, v);}
|
||||
public Db_stmt Val_str(String k, String v) {return Add_str(Bool_.N, k, v);}
|
||||
public Db_stmt Val_str(String v) {return Add_str(Bool_.N, Key_na, v);}
|
||||
@@ -107,6 +107,7 @@ public class Db_stmt__mem implements Db_stmt {
|
||||
}
|
||||
public boolean Exec_insert() {
|
||||
Mem_tbl tbl = engine.Tbls_get(qry.Base_table());
|
||||
if (tbl == null) throw Err_.new_("must call Create_tbl; tbl={0}", qry.Base_table());
|
||||
return tbl.Insert(this) == 1;
|
||||
}
|
||||
public int Exec_update() {
|
||||
@@ -126,11 +127,11 @@ public class Db_stmt__mem implements Db_stmt {
|
||||
public Object Exec_select_val() {throw Err_.not_implemented_();}
|
||||
private void Add(String k, boolean where, Object v) {
|
||||
if (k == Db_meta_fld.Key_null) return; // key is explicitly null; ignore; allows schema_2+ type definitions
|
||||
val_list.Add_if_new(k, v); // NOTE: only add if new; WHERE with IN will call Add many times; fld_ttl IN ('A.png', 'B.png');
|
||||
val_list.Add_if_dupe_use_1st(k, v); // NOTE: only add if new; WHERE with IN will call Add many times; fld_ttl IN ('A.png', 'B.png');
|
||||
if (where) {
|
||||
ListAdp list = (ListAdp)crt_hash.Fetch(k);
|
||||
List_adp list = (List_adp)crt_hash.Get_by(k);
|
||||
if (list == null) {
|
||||
list = ListAdp_.new_();
|
||||
list = List_adp_.new_();
|
||||
crt_hash.Add(k, list);
|
||||
}
|
||||
list.Add(v);
|
||||
|
||||
@@ -17,10 +17,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.dbs.engines.mems; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*;
|
||||
public class Mem_itm implements GfoInvkAble {
|
||||
private final OrderedHash hash = OrderedHash_.new_();
|
||||
public Object Get_by(String key) {return hash.Fetch(key);}
|
||||
public Object Get_at(int i) {return hash.FetchAt(i);}
|
||||
public void Set_by(String key, Object val) {hash.AddReplace(key, val);}
|
||||
private final Ordered_hash hash = Ordered_hash_.new_();
|
||||
public Object Get_by(String key) {return hash.Get_by(key);}
|
||||
public Object Get_at(int i) {return hash.Get_at(i);}
|
||||
public void Set_by(String key, Object val) {hash.Add_if_dupe_use_nth(key, val);}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
Object rv = Get_by(k);
|
||||
if (rv == null) return GfoInvkAble_.Rv_unhandled;
|
||||
|
||||
@@ -18,8 +18,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.dbs.engines.mems; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*;
|
||||
import gplx.core.primitives.*; import gplx.core.criterias.*; import gplx.dbs.qrys.*;
|
||||
public class Mem_tbl {
|
||||
private final ListAdp rows = ListAdp_.new_(); private final ListAdp where_rows = ListAdp_.new_();
|
||||
private final HashAdp autonum_hash = HashAdp_.new_();
|
||||
private final List_adp rows = List_adp_.new_(); private final List_adp where_rows = List_adp_.new_();
|
||||
private final Hash_adp autonum_hash = Hash_adp_.new_();
|
||||
private final Db_meta_tbl meta;
|
||||
public Mem_tbl(Db_meta_tbl meta) {this.meta = meta;}
|
||||
public int Insert(Db_stmt__mem stmt) {
|
||||
@@ -36,7 +36,7 @@ public class Mem_tbl {
|
||||
return 1;
|
||||
}
|
||||
private int Autonum_calc(String name) {
|
||||
Int_obj_ref autonum_itm = (Int_obj_ref)autonum_hash.Fetch(name);
|
||||
Int_obj_ref autonum_itm = (Int_obj_ref)autonum_hash.Get_by(name);
|
||||
if (autonum_itm == null) {
|
||||
autonum_itm = Int_obj_ref.new_(0);
|
||||
autonum_hash.Add(name, autonum_itm);
|
||||
@@ -50,7 +50,7 @@ public class Mem_tbl {
|
||||
int where_rows_len = where_rows.Count();
|
||||
String[] update_cols = qry.Cols_for_update(); int update_cols_len = update_cols.length;
|
||||
for (int i = 0; i < where_rows_len; ++i) {
|
||||
Mem_itm itm = (Mem_itm)where_rows.FetchAt(i);
|
||||
Mem_itm itm = (Mem_itm)where_rows.Get_at(i);
|
||||
for (int j = 0; j < update_cols_len; ++j)
|
||||
itm.Set_by(update_cols[j], stmt.Args_get_at(j));
|
||||
}
|
||||
@@ -62,7 +62,7 @@ public class Mem_tbl {
|
||||
Select_rows_where(where_rows, stmt, qry.Where());
|
||||
int where_rows_len = where_rows.Count();
|
||||
for (int i = 0; i < where_rows_len; ++i) {
|
||||
Mem_itm itm = (Mem_itm)where_rows.FetchAt(i);
|
||||
Mem_itm itm = (Mem_itm)where_rows.Get_at(i);
|
||||
rows.Del(itm);
|
||||
}
|
||||
return where_rows_len;
|
||||
@@ -81,13 +81,13 @@ public class Mem_tbl {
|
||||
}
|
||||
where.Val_from_args(stmt.Crts());
|
||||
Select_rows_where(where_rows, stmt, where);
|
||||
return new Db_rdr__mem(select, (Mem_itm[])where_rows.Xto_ary_and_clear(Mem_itm.class));
|
||||
return new Db_rdr__mem(select, (Mem_itm[])where_rows.To_ary_and_clear(Mem_itm.class));
|
||||
}
|
||||
private void Select_rows_where(ListAdp rv, Db_stmt__mem stmt, Criteria crt) {
|
||||
private void Select_rows_where(List_adp rv, Db_stmt__mem stmt, Criteria crt) {
|
||||
rv.Clear();
|
||||
int rows_len = rows.Count();
|
||||
for (int i = 0; i < rows_len; ++i) {
|
||||
Mem_itm itm = (Mem_itm)rows.FetchAt(i);
|
||||
Mem_itm itm = (Mem_itm)rows.Get_at(i);
|
||||
if (crt.Matches(itm))
|
||||
rv.Add(itm);
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ public class Sqlite_conn_info extends Db_conn_info__base {
|
||||
));
|
||||
}
|
||||
public static Db_conn_info make_(Io_url url) {
|
||||
Io_mgr._.CreateDirIfAbsent(url.OwnerDir());
|
||||
Io_mgr.I.CreateDirIfAbsent(url.OwnerDir());
|
||||
return Db_conn_info_.parse_(Bld_raw
|
||||
( "gplx_key" , Tid_const
|
||||
, "data source" , url.Xto_api()
|
||||
|
||||
@@ -75,7 +75,7 @@ public class Sqlite_engine_ {
|
||||
}
|
||||
}
|
||||
public static Db_conn Conn_load_or_make_(Io_url url, Bool_obj_ref created) {
|
||||
boolean exists = Io_mgr._.ExistsFil(url);
|
||||
boolean exists = Io_mgr.I.ExistsFil(url);
|
||||
created.Val_(!exists);
|
||||
Db_conn_info connect = exists ? Sqlite_conn_info.load_(url) : Sqlite_conn_info.make_(url);
|
||||
Db_conn p = Db_conn_pool.I.Get_or_new(connect);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.dbs.engines.sqlite; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*;
|
||||
import gplx.dbs.qrys.*;
|
||||
public class Sqlite_txn_mgr {
|
||||
private final ListAdp txn_list = ListAdp_.new_();
|
||||
private final List_adp txn_list = List_adp_.new_();
|
||||
public Sqlite_txn_mgr(Db_engine engine) {this.engine = engine;} private final Db_engine engine;
|
||||
private boolean pragma_needed = Bool_.Y, txn_started = Bool_.N; // NOTE: txns only support 1 level; SQLite fails when nesting transactions; DATE:2015-03-11
|
||||
public void Txn_bgn(String name) {
|
||||
@@ -44,7 +44,7 @@ public class Sqlite_txn_mgr {
|
||||
}
|
||||
public void Txn_end() {
|
||||
if (txn_list.Count() == 0) {Gfo_usr_dlg_.I.Warn_many("", "", "no txns in stack;"); return;}
|
||||
String txn_last = (String)txn_list.PopLast();
|
||||
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;"));
|
||||
txn_started = false;
|
||||
@@ -54,7 +54,7 @@ public class Sqlite_txn_mgr {
|
||||
}
|
||||
public void Txn_cxl() {
|
||||
if (txn_list.Count() == 0) {Gfo_usr_dlg_.I.Warn_many("", "", "no txns in stack;"); return;}
|
||||
String txn_last = (String)txn_list.PopLast();
|
||||
String txn_last = (String)List_adp_.Pop_last(txn_list);
|
||||
if (txn_list.Count() == 0) {// no txns left; rollback
|
||||
engine.Exec_as_obj(Db_qry_sql.xtn_("ROLLBACK TRANSACTION;"));
|
||||
txn_started = false;
|
||||
@@ -64,7 +64,7 @@ public class Sqlite_txn_mgr {
|
||||
}
|
||||
public void Txn_sav() {
|
||||
if (txn_list.Count() == 0) {Gfo_usr_dlg_.I.Warn_many("", "", "no txns in stack;"); return;}
|
||||
String name = (String)txn_list.FetchAt(txn_list.Count() - 1);
|
||||
String name = (String)txn_list.Get_at(txn_list.Count() - 1);
|
||||
this.Txn_end(); this.Txn_bgn(name);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ public class TdbDatabase {
|
||||
return rv;
|
||||
}
|
||||
@gplx.Internal protected TdbTable MakeTbl(String name, int fileId) {
|
||||
TdbFile file = files.FetchOrFail(fileId);
|
||||
TdbFile file = files.Get_by_or_fail(fileId);
|
||||
TdbTable rv = TdbTable.new_(TableId_next++, name, file);
|
||||
tables.Add(rv);
|
||||
return rv;
|
||||
|
||||
@@ -19,7 +19,7 @@ package gplx.dbs.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs
|
||||
class TdbDbLoadMgr {
|
||||
public TdbDatabase LoadTbls(Io_url dbInfo) {
|
||||
TdbDatabase db = TdbDatabase.new_(dbInfo);
|
||||
if (!Io_mgr._.ExistsFil(dbInfo)) {
|
||||
if (!Io_mgr.I.ExistsFil(dbInfo)) {
|
||||
db.IsNew_set(true);
|
||||
return db;
|
||||
}
|
||||
@@ -37,12 +37,12 @@ class TdbDbLoadMgr {
|
||||
String name = rdr.NameOfNode();
|
||||
if (String_.Eq(name, TdbFileList.StoreTblName)) db.Files().DataObj_Rdr(rdr);
|
||||
else if (String_.Eq(name, TdbTableList.StoreTableName)) db.Tables().DataObj_Rdr(rdr, db.Files());
|
||||
else db.Tables().FetchOrFail(rdr.NameOfNode()).DataObj_Rdr(rdr);
|
||||
else db.Tables().Get_by_or_fail(rdr.NameOfNode()).DataObj_Rdr(rdr);
|
||||
}
|
||||
if (db.Files().Count() == 0) throw Err_.new_("fatal error: db has no files").Add("connectInfo", db.DbUrl());
|
||||
}
|
||||
DataRdr MakeDataRdr(Io_url fil) {
|
||||
String text = Io_mgr._.LoadFilStr(fil);
|
||||
String text = Io_mgr.I.LoadFilStr(fil);
|
||||
return TdbStores.rdr_(text);
|
||||
}
|
||||
public static TdbDbLoadMgr new_() {return new TdbDbLoadMgr();} TdbDbLoadMgr() {}
|
||||
|
||||
@@ -41,7 +41,7 @@ public class TdbDbLoadMgr_tst {
|
||||
|
||||
db.Files().DataObj_Rdr(rdr);
|
||||
Tfds.Eq(db.Files().Count(), 2);
|
||||
TdbFile file2 = db.Files().FetchOrFail(2);
|
||||
TdbFile file2 = db.Files().Get_by_or_fail(2);
|
||||
Tfds.Eq(file2.Path().Raw(), "C:\\file.dsv");
|
||||
|
||||
db.Files().DataObj_Wtr(wtr);
|
||||
@@ -61,7 +61,7 @@ public class TdbDbLoadMgr_tst {
|
||||
|
||||
db.Tables().DataObj_Rdr(rdr, db.Files());
|
||||
Tfds.Eq(db.Tables().Count(), 1);
|
||||
TdbTable table = db.Tables().FetchOrFail("tbl1");
|
||||
TdbTable table = db.Tables().Get_by_or_fail("tbl1");
|
||||
Tfds.Eq(table.Name(), "tbl1");
|
||||
Tfds.Eq(table.File().Id(), 1);
|
||||
|
||||
@@ -81,9 +81,9 @@ public class TdbDbLoadMgr_tst {
|
||||
rdr = rdr_(raw);
|
||||
|
||||
db.MakeTbl("tbl0", TdbFile.MainFileId);
|
||||
db.Tables().FetchOrFail(rdr.NameOfNode()).DataObj_Rdr(rdr);
|
||||
db.Tables().Get_by_or_fail(rdr.NameOfNode()).DataObj_Rdr(rdr);
|
||||
Tfds.Eq(db.Tables().Count(), 1);
|
||||
TdbTable tbl = db.Tables().FetchOrFail("tbl0");
|
||||
TdbTable tbl = db.Tables().Get_by_or_fail("tbl0");
|
||||
Tfds.Eq(tbl.Rows().Count(), 1);
|
||||
|
||||
GfoNde row = tbl.Rows().FetchAt_asGfoNde(0);
|
||||
|
||||
@@ -24,7 +24,7 @@ class TdbDbSaveMgr {
|
||||
}
|
||||
}
|
||||
public void SaveFile(TdbDatabase db, TdbFile fil) {
|
||||
ListAdp tbls = FetchTablesWithSamePath(db, fil.Path());
|
||||
List_adp tbls = FetchTablesWithSamePath(db, fil.Path());
|
||||
boolean isSaveNeeded = db.IsNew();
|
||||
for (Object tblObj : tbls) {
|
||||
TdbTable tbl = (TdbTable)tblObj;
|
||||
@@ -38,7 +38,7 @@ class TdbDbSaveMgr {
|
||||
db.IsNew_set(false);
|
||||
}
|
||||
}
|
||||
void SaveTblsToFile(TdbDatabase db, TdbFile fil, ListAdp tbls) {
|
||||
void SaveTblsToFile(TdbDatabase db, TdbFile fil, List_adp tbls) {
|
||||
DataWtr wtr = TdbStores.wtr_();
|
||||
if (fil.Id() == TdbFile.MainFileId) { // if MainFile, save critical Files and Tables data
|
||||
db.Files().DataObj_Wtr(wtr);
|
||||
@@ -48,10 +48,10 @@ class TdbDbSaveMgr {
|
||||
TdbTable tbl = (TdbTable)tblObj;
|
||||
tbl.DataObj_Wtr(wtr);
|
||||
}
|
||||
Io_mgr._.SaveFilStr(fil.Path(), wtr.XtoStr());
|
||||
Io_mgr.I.SaveFilStr(fil.Path(), wtr.XtoStr());
|
||||
}
|
||||
ListAdp FetchTablesWithSamePath(TdbDatabase db, Io_url filPath) {
|
||||
ListAdp list = ListAdp_.new_();
|
||||
List_adp FetchTablesWithSamePath(TdbDatabase db, Io_url filPath) {
|
||||
List_adp list = List_adp_.new_();
|
||||
for (Object tblObj : db.Tables()) {
|
||||
TdbTable tbl = (TdbTable)tblObj;
|
||||
if (tbl.File().Path().Eq (filPath))
|
||||
|
||||
@@ -21,7 +21,7 @@ class TdbDeleteWkr implements Db_qryWkr {
|
||||
public Object Exec(Db_engine engineObj, Db_qry cmdObj) {
|
||||
TdbEngine engine = TdbEngine.cast_(engineObj); Db_qry_delete cmd = (Db_qry_delete)cmdObj;
|
||||
TdbTable tbl = engine.FetchTbl(cmd.Base_table());
|
||||
ListAdp deleted = ListAdp_.new_();
|
||||
List_adp deleted = List_adp_.new_();
|
||||
int rv = 0;
|
||||
if (cmd.Where() == Db_qry_.WhereAll) {
|
||||
rv = tbl.Rows().Count();
|
||||
@@ -35,7 +35,7 @@ class TdbDeleteWkr implements Db_qryWkr {
|
||||
deleted.Add(row);
|
||||
}
|
||||
for (int i = 0; i < deleted.Count(); i++) {
|
||||
GfoNde row = (GfoNde)deleted.FetchAt(i);
|
||||
GfoNde row = (GfoNde)deleted.Get_at(i);
|
||||
tbl.Rows().Del(row);
|
||||
rv++;
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ public class TdbEngine implements Db_engine {
|
||||
return rv;
|
||||
}
|
||||
public Object Exec_as_obj(Db_qry qry) {
|
||||
Db_qryWkr wkr = (Db_qryWkr)wkrs.FetchOrFail(qry.Tid());
|
||||
Db_qryWkr wkr = (Db_qryWkr)wkrs.Get_by_or_fail(qry.Tid());
|
||||
return wkr.Exec(this, qry);
|
||||
}
|
||||
public Db_stmt New_stmt_prep(Db_qry qry) {return new Db_stmt_sql().Parse(qry, Sql_qry_wtr_.I.Xto_str(qry, true));}
|
||||
@@ -47,7 +47,7 @@ public class TdbEngine implements Db_engine {
|
||||
public Db_rdr New_rdr__rls_auto(Db_stmt stmt, Object rdr_obj, String sql) {return Db_rdr_.Empty;}
|
||||
public DataRdr New_rdr(java.sql.ResultSet rdr, String sql) {return DataRdr_.Null;}
|
||||
public TdbTable FetchTbl(String name) {
|
||||
TdbTable tbl = db.Tables().FetchOrFail(name);
|
||||
TdbTable tbl = db.Tables().Get_by_or_fail(name);
|
||||
if (!tbl.IsLoaded()) loadMgr.LoadTbl(db, tbl);
|
||||
return tbl;
|
||||
}
|
||||
@@ -64,7 +64,7 @@ public class TdbEngine implements Db_engine {
|
||||
public void Env_db_attach(String alias, Io_url db_url) {}
|
||||
public void Env_db_detach(String alias) {}
|
||||
|
||||
HashAdp wkrs = HashAdp_.new_(); TdbDbLoadMgr loadMgr = TdbDbLoadMgr.new_(); TdbDbSaveMgr saveMgr = TdbDbSaveMgr.new_();
|
||||
Hash_adp wkrs = Hash_adp_.new_(); TdbDbLoadMgr loadMgr = TdbDbLoadMgr.new_(); TdbDbSaveMgr saveMgr = TdbDbSaveMgr.new_();
|
||||
public static final TdbEngine _ = new TdbEngine();
|
||||
void CtorTdbEngine(Db_conn_info conn_info) {
|
||||
this.conn_info = conn_info;
|
||||
|
||||
@@ -16,9 +16,9 @@ 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.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*;
|
||||
import gplx.lists.*; /*OrderedHash_base*/ import gplx.stores.dsvs.*; /*DsvStoreLayout*/
|
||||
public class TdbFileList extends OrderedHash_base {
|
||||
public TdbFile FetchOrFail(int id) {return TdbFile.as_(FetchOrFail_base(id));}
|
||||
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 void Add(TdbFile src) {Add_base(src.Id(), src);}
|
||||
|
||||
Io_url dbInfo;
|
||||
|
||||
@@ -20,7 +20,7 @@ import org.junit.*;
|
||||
import gplx.ios.*; /*IoMgrFxt*/ import gplx.dbs.qrys.*;
|
||||
public class TdbFlush_tst {
|
||||
@Before public void setup() {
|
||||
Io_mgr._.InitEngine_mem();
|
||||
Io_mgr.I.InitEngine_mem();
|
||||
engine = fx_engine.run_MakeEngine(dbPath);
|
||||
}
|
||||
TdbEngine engine; Io_url dbPath = Io_url_.mem_fil_("mem/dir/db0.dsv"); DateAdp time = DateAdp_.parse_gplx("2001-01-01");
|
||||
@@ -100,20 +100,20 @@ class TdbEngineFxt {
|
||||
|
||||
public void tst_FilesCount(TdbEngine engine, int count) {Tfds.Eq(engine.Db().Files().Count(), count);}
|
||||
public void tst_File(TdbEngine engine, int index, int id, Io_url url, String format) {
|
||||
TdbFile src = engine.Db().Files().FetchOrFail(id);
|
||||
TdbFile src = engine.Db().Files().Get_by_or_fail(id);
|
||||
Tfds.Eq(src.Path().Raw(), url.Raw());
|
||||
}
|
||||
public static TdbEngineFxt new_() {return new TdbEngineFxt();} TdbEngineFxt() {}
|
||||
}
|
||||
class IoMgrFxt {
|
||||
public void run_UpdateFilModifiedTime(Io_url url, DateAdp val) {Io_mgr._.UpdateFilModifiedTime(url, val);}
|
||||
public void run_UpdateFilModifiedTime(Io_url url, DateAdp val) {Io_mgr.I.UpdateFilModifiedTime(url, val);}
|
||||
public void tst_QueryFilModified(boolean expdMatch, Io_url url, DateAdp expt) {
|
||||
IoItmFil filItem = Io_mgr._.QueryFil(url);
|
||||
IoItmFil filItem = Io_mgr.I.QueryFil(url);
|
||||
DateAdp actl = filItem.ModifiedTime();
|
||||
boolean actlMatch = String_.Eq(expt.XtoStr_gplx(), actl.XtoStr_gplx());
|
||||
Tfds.Eq(expdMatch, actlMatch, expt.XtoStr_gplx() + (expdMatch ? "!=" : "==") + actl.XtoStr_gplx());
|
||||
}
|
||||
public void tst_Exists(boolean expd, Io_url url) {Tfds.Eq(expd, Io_mgr._.ExistsFil(url));}
|
||||
public void tst_Exists(boolean expd, Io_url url) {Tfds.Eq(expd, Io_mgr.I.ExistsFil(url));}
|
||||
|
||||
public static IoMgrFxt new_() {return new IoMgrFxt();} IoMgrFxt() {}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ class TdbInsertWkr implements Db_qryWkr {
|
||||
int InsertRowsByVals(TdbEngine engine, TdbTable tbl, Db_qry_insert insert) {
|
||||
GfoNde row = GfoNde_.vals_(tbl.Flds(), new Object[tbl.Flds().Count()]);
|
||||
for (int i = 0; i < insert.Args().Count(); i++) {
|
||||
KeyVal kv = insert.Args().FetchAt(i);
|
||||
KeyVal kv = insert.Args().Get_at(i);
|
||||
Db_arg arg = (Db_arg)kv.Val();
|
||||
row.Write(kv.Key(), arg.Val());
|
||||
}
|
||||
|
||||
@@ -28,8 +28,8 @@ class TdbSelectWkr implements Db_qryWkr {
|
||||
if (cmd.GroupBy() != null)
|
||||
rv = TdbGroupByWkr.GroupByExec(cmd, rv, tbl);
|
||||
if (cmd.OrderBy() != null) { // don't use null pattern here; if null ORDER BY, then don't call .Sort on GfoNdeList
|
||||
ComparerAble comparer = Sql_order_by_sorter.new_((Sql_order_by_itm[])cmd.OrderBy().Flds().Xto_ary(Sql_order_by_itm.class));
|
||||
rv.SortBy(comparer);
|
||||
ComparerAble comparer = Sql_order_by_sorter.new_((Sql_order_by_itm[])cmd.OrderBy().Flds().To_ary(Sql_order_by_itm.class));
|
||||
rv.Sort_by(comparer);
|
||||
}
|
||||
return GfoNdeRdr_.peers_(rv, false);
|
||||
}
|
||||
@@ -49,30 +49,30 @@ class TdbSelectWkr implements Db_qryWkr {
|
||||
class TdbGroupByWkr {
|
||||
public static GfoNdeList GroupByExec(Db_qry__select_cmd select, GfoNdeList selectRows, TdbTable tbl) {
|
||||
GfoNdeList rv = GfoNdeList_.new_();
|
||||
OrderedHash groupByHash = OrderedHash_.new_();
|
||||
ListAdp groupByFlds = select.GroupBy().Flds();
|
||||
Ordered_hash groupByHash = Ordered_hash_.new_();
|
||||
List_adp groupByFlds = select.GroupBy().Flds();
|
||||
GfoFldList selectFldsForNewRow = select.Cols().Flds().XtoGfoFldLst(tbl);
|
||||
Sql_select_fld_list selectFlds = select.Cols().Flds();
|
||||
for (int rowIdx = 0; rowIdx < selectRows.Count(); rowIdx++) {
|
||||
GfoNde selectRow = selectRows.FetchAt_asGfoNde(rowIdx);
|
||||
GfoNde groupByRow = FindOrNew(selectFldsForNewRow, groupByFlds, selectRow, groupByHash, rv);
|
||||
for (int i = 0; i < selectFlds.Count(); i++) {
|
||||
Sql_select_fld_base selectFld = selectFlds.FetchAt(i);
|
||||
Sql_select_fld_base selectFld = selectFlds.Get_at(i);
|
||||
Object val = groupByRow.Read(selectFld.Alias()); // groupByRow is keyed by Alias; EX: Count(Id) AS CountOf
|
||||
groupByRow.WriteAt(i, selectFld.GroupBy_eval(val, selectRow.Read(selectFld.Fld()), selectFld.ValType()));
|
||||
}
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
static GfoNde FindOrNew(GfoFldList selectFldsForNewRow, ListAdp groupByFlds, GfoNde selectRow, OrderedHash groupByRows, GfoNdeList rslt) {
|
||||
static GfoNde FindOrNew(GfoFldList selectFldsForNewRow, List_adp groupByFlds, GfoNde selectRow, Ordered_hash groupByRows, GfoNdeList rslt) {
|
||||
int len = groupByFlds.Count();
|
||||
OrderedHash curHash = groupByRows;
|
||||
Ordered_hash curHash = groupByRows;
|
||||
GfoNde rv = null;
|
||||
for (int i = 0; i < len; i++) {
|
||||
String fld = (String)groupByFlds.FetchAt(i);
|
||||
String fld = (String)groupByFlds.Get_at(i);
|
||||
boolean last = i == len - 1;
|
||||
Object val = selectRow.Read(fld);
|
||||
Object o = curHash.Fetch(val);
|
||||
Object o = curHash.Get_by(val);
|
||||
if (last) {
|
||||
if (o == null) {
|
||||
Object[] valAry = new Object[selectFldsForNewRow.Count()];
|
||||
@@ -85,12 +85,12 @@ class TdbGroupByWkr {
|
||||
}
|
||||
else {
|
||||
if (o == null) {
|
||||
OrderedHash nextHash = OrderedHash_.new_();
|
||||
Ordered_hash nextHash = Ordered_hash_.new_();
|
||||
curHash.Add(val, nextHash);
|
||||
curHash = nextHash;
|
||||
}
|
||||
else {
|
||||
curHash = (OrderedHash)o;
|
||||
curHash = (Ordered_hash)o;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,6 @@ class TdbStores {
|
||||
public static DataWtr wtr_() {return DsvDataWtr_.new_();}
|
||||
@gplx.Internal protected static DsvStoreLayout FetchLayout(DataRdr rdr) {
|
||||
GfoNdeRdr ndeRdr = GfoNdeRdr_.as_(rdr); if (ndeRdr == null) return null; // can happen for non-Dsv Rdrs (ex: Xml)
|
||||
return DsvStoreLayout.as_(ndeRdr.UnderNde().EnvVars().Fetch(DsvStoreLayout.Key_const));
|
||||
return DsvStoreLayout.as_(ndeRdr.UnderNde().EnvVars().Get_by(DsvStoreLayout.Key_const));
|
||||
}
|
||||
}
|
||||
@@ -40,7 +40,7 @@ public class TdbTable {
|
||||
GfoNde drow = rows.FetchAt_asGfoNde(rowIdx);
|
||||
wtr.WriteLeafBgn("row");
|
||||
for (int i = 0; i < drow.Flds().Count(); i++)
|
||||
wtr.WriteData(drow.Flds().FetchAt(i).Key(), drow.ReadAt(i));
|
||||
wtr.WriteData(drow.Flds().Get_at(i).Key(), drow.ReadAt(i));
|
||||
wtr.WriteLeafEnd();
|
||||
}
|
||||
wtr.WriteNodeEnd();
|
||||
|
||||
@@ -16,11 +16,11 @@ 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.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*;
|
||||
import gplx.lists.*; /*OrderedHash_base*/ import gplx.stores.dsvs.*; /*DsvStoreLayout*/
|
||||
public class TdbTableList extends OrderedHash_base {
|
||||
public TdbTable Fetch(String name) {return TdbTable.as_(Fetch_base(name));}
|
||||
public TdbTable FetchOrFail(String name) {
|
||||
TdbTable rv = TdbTable.as_(Fetch(name)); if (rv == null) throw Err_.new_("could not find table; database file may not exist").Add("table", name);
|
||||
import gplx.lists.*; /*Ordered_hash_base*/ import gplx.stores.dsvs.*; /*DsvStoreLayout*/
|
||||
public class TdbTableList extends Ordered_hash_base {
|
||||
public TdbTable Get_by(String name) {return TdbTable.as_(Fetch_base(name));}
|
||||
public TdbTable Get_by_or_fail(String name) {
|
||||
TdbTable rv = TdbTable.as_(Get_by(name)); if (rv == null) throw Err_.new_("could not find table; database file may not exist").Add("table", name);
|
||||
return rv;
|
||||
}
|
||||
public void Add(TdbTable dataTable) {Add_base(dataTable.Name(), dataTable);}
|
||||
@@ -51,7 +51,7 @@ public class TdbTableList extends OrderedHash_base {
|
||||
int id = subRdr.ReadInt(Fld_id);
|
||||
String name = subRdr.ReadStr(Fld_name);
|
||||
int file_id = subRdr.ReadInt(Fld_file_id);
|
||||
TdbFile file = files.FetchOrFail(file_id);
|
||||
TdbFile file = files.Get_by_or_fail(file_id);
|
||||
TdbTable table = TdbTable.load_(id, name, file);
|
||||
this.Add(table);
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ class TdbUpdateWkr implements Db_qryWkr {
|
||||
}
|
||||
void UpdateRow(Db_qry_update cmd, GfoNde row) {
|
||||
for (int i = 0; i < cmd.Args().Count(); i++) {
|
||||
KeyVal p = (KeyVal)cmd.Args().FetchAt(i);
|
||||
KeyVal p = (KeyVal)cmd.Args().Get_at(i);
|
||||
Db_arg prm = (Db_arg)p.Val();
|
||||
row.Write(p.Key(), prm.Val());
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ public class Db_qry__select_cmd implements Db_qry {
|
||||
try {
|
||||
Object rv = null;
|
||||
if (rdr.MoveNextPeer()) {
|
||||
rv = rdr.Read(cols.Flds().FetchAt(0).Fld()); // NOTE: need to access from flds for tdb
|
||||
rv = rdr.Read(cols.Flds().Get_at(0).Fld()); // NOTE: need to access from flds for tdb
|
||||
}
|
||||
return rv;
|
||||
} finally {rdr.Rls();}
|
||||
|
||||
@@ -71,7 +71,7 @@ public class Db_qry__select_in_tbl implements Db_qry {
|
||||
for (int i = 0; i < len; ++i) {
|
||||
String order_fld = order_flds[i];
|
||||
if (i != 0) bfr.Add_byte_comma();
|
||||
bfr.Add_str_ascii(order_fld);
|
||||
bfr.Add_str_a7(order_fld);
|
||||
}
|
||||
order_by_sql = bfr.Xto_str_and_clear();
|
||||
break;
|
||||
|
||||
@@ -34,7 +34,7 @@ public class Db_qry_insert implements Db_qry_arg_owner {
|
||||
public Db_qry_arg_owner Arg_(String k, long v) {return Arg_obj_type_(k, v, Db_val_type.Tid_int64);}
|
||||
public Db_qry_arg_owner Arg_(String k, String v) {return Arg_obj_type_(k, v, Db_val_type.Tid_varchar);}
|
||||
public Db_qry_arg_owner Arg_bry_(String k, byte[] v) {return Arg_obj_type_(k, v, Db_val_type.Tid_bry);}
|
||||
public Db_qry_arg_owner Arg_(String k, byte[] v) {return Arg_obj_type_(k, String_.new_utf8_(v), Db_val_type.Tid_varchar);}
|
||||
public Db_qry_arg_owner Arg_(String k, byte[] v) {return Arg_obj_type_(k, String_.new_u8(v), Db_val_type.Tid_varchar);}
|
||||
public Db_qry_arg_owner Arg_obj_(String k, Object v) {return Arg_obj_type_(k, v, Db_val_type.Tid_null);}
|
||||
public Db_qry_arg_owner Arg_obj_type_(String key, Object val, byte val_tid) {
|
||||
if (key == Db_meta_fld.Key_null) return this;
|
||||
|
||||
@@ -39,7 +39,7 @@ public class Db_qry_sql implements Db_qry {
|
||||
public static Db_qry_sql as_(Object obj) {return obj instanceof Db_qry_sql ? (Db_qry_sql)obj : null;}
|
||||
public static Db_qry_sql cast_(Object obj) {try {return (Db_qry_sql)obj;} catch(Exception exc) {throw Err_.type_mismatch_exc_(exc, Db_qry_sql.class, obj);}}
|
||||
public static String Gen_sql(Db_qry qry, Object... args) {
|
||||
byte[] src = Bry_.new_utf8_(Sql_qry_wtr_.Gen_placeholder_parameters(qry));
|
||||
byte[] src = Bry_.new_u8(Sql_qry_wtr_.Gen_placeholder_parameters(qry));
|
||||
int src_len = src.length;
|
||||
int args_idx = 0, args_len = args.length, pos = 0;
|
||||
Bry_bfr bfr = Bry_bfr.new_(src_len);
|
||||
@@ -74,9 +74,9 @@ public class Db_qry_sql implements Db_qry {
|
||||
else if (ClassAdp_.Eq(val_type, DecimalAdp_.Cls_ref_type))
|
||||
bfr.Add_str(DecimalAdp_.cast_(val).Xto_str());
|
||||
else {
|
||||
byte[] val_bry = Bry_.new_utf8_(Object_.Xto_str_strict_or_null(val));
|
||||
byte[] val_bry = Bry_.new_u8(Object_.Xto_str_strict_or_null(val));
|
||||
val_bry = Bry_.Replace(val_bry, Byte_ascii.Apos_bry, Bry_escape_apos);
|
||||
bfr.Add_byte_apos().Add(val_bry).Add_byte_apos();
|
||||
}
|
||||
} private static final byte[] Bry_null = Bry_.new_utf8_("NULL"), Bry_escape_apos = Bry_.new_ascii_("''");
|
||||
} private static final byte[] Bry_null = Bry_.new_u8("NULL"), Bry_escape_apos = Bry_.new_a7("''");
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ public class Db_qry_update implements Db_qry_arg_owner {
|
||||
public Db_qry_arg_owner Arg_(String k, long v) {return Arg_obj_type_(k, v, Db_val_type.Tid_int64);}
|
||||
public Db_qry_arg_owner Arg_(String k, String v) {return Arg_obj_type_(k, v, Db_val_type.Tid_varchar);}
|
||||
public Db_qry_arg_owner Arg_bry_(String k, byte[] v) {return Arg_obj_type_(k, v, Db_val_type.Tid_bry);}
|
||||
public Db_qry_arg_owner Arg_(String k, byte[] v) {return Arg_obj_type_(k, String_.new_utf8_(v), Db_val_type.Tid_varchar);}
|
||||
public Db_qry_arg_owner Arg_(String k, byte[] v) {return Arg_obj_type_(k, String_.new_u8(v), Db_val_type.Tid_varchar);}
|
||||
public Db_qry_arg_owner Arg_obj_(String k, Object v) {return Arg_obj_type_(k, v, Db_val_type.Tid_null);}
|
||||
public Db_qry_arg_owner Arg_obj_type_(String key, Object val, byte val_tid) {
|
||||
if (key == Db_meta_fld.Key_null) return this;
|
||||
|
||||
@@ -96,7 +96,7 @@ public class Db_stmt_cmd implements Db_stmt {
|
||||
public Db_stmt Crt_bry_as_str(String k, byte[] v) {return Add_bry_as_str(Bool_.Y, k, v);}
|
||||
public Db_stmt Val_bry_as_str(String k, byte[] v) {return Add_bry_as_str(Bool_.N, k, v);}
|
||||
public Db_stmt Val_bry_as_str(byte[] v) {return Add_bry_as_str(Bool_.N, Key_na, v);}
|
||||
private Db_stmt Add_bry_as_str(boolean where, String k, byte[] v) {return Add_str(where, k, String_.new_utf8_(v));}
|
||||
private Db_stmt Add_bry_as_str(boolean where, String k, byte[] v) {return Add_str(where, k, String_.new_u8(v));}
|
||||
public Db_stmt Crt_str(String k, String v) {return Add_str(Bool_.Y, k, v);}
|
||||
public Db_stmt Val_str(String k, String v) {return Add_str(Bool_.N, k, v);}
|
||||
public Db_stmt Val_str(String v) {return Add_str(Bool_.N, Key_na, v);}
|
||||
|
||||
@@ -19,7 +19,7 @@ package gplx.dbs.qrys; import gplx.*; import gplx.dbs.*;
|
||||
import gplx.dbs.engines.*;
|
||||
public class Db_stmt_sql implements Db_stmt {// used for formatting SQL statements; not used for actual insert into database
|
||||
private static final String Key_na = ""; // key is not_available; only called by procs with signature of Val(<type> v);
|
||||
private final ListAdp args = ListAdp_.new_();
|
||||
private final List_adp args = List_adp_.new_();
|
||||
private final Bry_bfr tmp_bfr = Bry_bfr.new_();
|
||||
private final Bry_fmtr tmp_fmtr = Bry_fmtr.new_();
|
||||
public void Ctor_stmt(Db_engine engine, Db_qry qry) {}
|
||||
@@ -75,13 +75,13 @@ public class Db_stmt_sql implements Db_stmt {// used for formatting SQL statemen
|
||||
public Db_stmt Val_bry(String k, byte[] v) {return Add_bry(Bool_.N, k, v);}
|
||||
public Db_stmt Val_bry(byte[] v) {return Add_bry(Bool_.N, Key_na, v);}
|
||||
private Db_stmt Add_bry(boolean where, String k, byte[] v) {// HACK: convert to String b/c tdb does not support byte[]
|
||||
try {Add(k, Val_str_wrap(String_.new_utf8_(v)));} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "byte[]", v.length);}
|
||||
try {Add(k, Val_str_wrap(String_.new_u8(v)));} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "byte[]", v.length);}
|
||||
return this;
|
||||
}
|
||||
public Db_stmt Crt_bry_as_str(String k, byte[] v) {return Add_bry_as_str(Bool_.Y, k, v);}
|
||||
public Db_stmt Val_bry_as_str(String k, byte[] v) {return Add_bry_as_str(Bool_.N, k, v);}
|
||||
public Db_stmt Val_bry_as_str(byte[] v) {return Add_bry_as_str(Bool_.N, Key_na, v);}
|
||||
private Db_stmt Add_bry_as_str(boolean where, String k, byte[] v) {return Add_str(where, k, String_.new_utf8_(v));}
|
||||
private Db_stmt Add_bry_as_str(boolean where, String k, byte[] v) {return Add_str(where, k, String_.new_u8(v));}
|
||||
public Db_stmt Crt_str(String k, String v) {return Add_str(Bool_.Y, k, v);}
|
||||
public Db_stmt Val_str(String k, String v) {return Add_str(Bool_.N, k, v);}
|
||||
public Db_stmt Val_str(String v) {return Add_str(Bool_.N, Key_na, v);}
|
||||
@@ -127,11 +127,11 @@ public class Db_stmt_sql implements Db_stmt {// used for formatting SQL statemen
|
||||
args.Add(v);
|
||||
}
|
||||
public String Xto_sql() {
|
||||
tmp_fmtr.Bld_bfr_many(tmp_bfr, (Object[])args.Xto_ary_and_clear(Object.class));
|
||||
tmp_fmtr.Bld_bfr_many(tmp_bfr, (Object[])args.To_ary_and_clear(Object.class));
|
||||
return tmp_bfr.Xto_str_and_clear();
|
||||
}
|
||||
public int Args_len() {return args.Count();}
|
||||
public String Args_get_at(int i) {return (String)args.FetchAt(i);}
|
||||
public String Args_get_at(int i) {return (String)args.Get_at(i);}
|
||||
private String sql_orig;
|
||||
public Db_qry Qry() {return qry;} private Db_qry qry;
|
||||
public Db_stmt Parse(Db_qry qry, String sql_str) {
|
||||
@@ -141,7 +141,7 @@ public class Db_stmt_sql implements Db_stmt {// used for formatting SQL statemen
|
||||
return this;
|
||||
}
|
||||
private static void Init_fmtr(Bry_bfr tmp_bfr, Bry_fmtr tmp_fmtr, String sql_str) {
|
||||
byte[] sql_bry = Bry_.new_utf8_(sql_str);
|
||||
byte[] sql_bry = Bry_.new_u8(sql_str);
|
||||
int arg_idx = 0; int pos_prv = 0;
|
||||
tmp_bfr.Clear();
|
||||
while (true) {
|
||||
@@ -155,9 +155,9 @@ public class Db_stmt_sql implements Db_stmt {// used for formatting SQL statemen
|
||||
tmp_bfr.Add_mid(sql_bry, pos_prv, sql_bry.length);
|
||||
tmp_fmtr.Fmt_(tmp_bfr.Xto_bry_and_clear());
|
||||
}
|
||||
public static String Xto_str(Bry_bfr tmp_bfr, Bry_fmtr tmp_fmtr, String sql_str, ListAdp args) {
|
||||
public static String Xto_str(Bry_bfr tmp_bfr, Bry_fmtr tmp_fmtr, String sql_str, List_adp args) {
|
||||
Init_fmtr(tmp_bfr, tmp_fmtr, sql_str);
|
||||
Object[] ary = args.Xto_obj_ary();
|
||||
Object[] ary = args.To_obj_ary();
|
||||
int len = ary.length;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
Object obj = ary[i];
|
||||
|
||||
@@ -21,7 +21,7 @@ public class Db_obj_ary_crt implements gplx.core.criterias.Criteria {
|
||||
public byte Tid() {return Criteria_.Tid_db_obj_ary;}
|
||||
public Db_fld[] Flds() {return flds;} public Db_obj_ary_crt Flds_(Db_fld[] v) {this.flds = v; return this;} private Db_fld[] flds;
|
||||
public Object[][] Vals() {return vals;} public void Vals_(Object[][] v) {this.vals = v;} private Object[][] vals;
|
||||
public void Val_from_args(HashAdp args) {throw Err_.not_implemented_();}
|
||||
public void Val_from_args(Hash_adp args) {throw Err_.not_implemented_();}
|
||||
public void Val_as_obj_(Object v) {throw Err_.not_implemented_();}
|
||||
public boolean Matches(Object obj) {return false;}
|
||||
public String XtoStr() {return "";}
|
||||
|
||||
@@ -28,13 +28,13 @@ public class Db_obj_ary_tst {
|
||||
}
|
||||
class Db_obj_ary_fxt {
|
||||
private Db_obj_ary_crt crt = new Db_obj_ary_crt();
|
||||
public Db_obj_ary_fxt Init_fld(String name, byte tid) {flds_list.Add(new Db_fld(name, tid)); return this;} private ListAdp flds_list = ListAdp_.new_();
|
||||
public Db_obj_ary_fxt Init_vals(Object... ary) {vals_list.Add(ary); return this;} private ListAdp vals_list = ListAdp_.new_();
|
||||
public Db_obj_ary_fxt Init_fld(String name, byte tid) {flds_list.Add(new Db_fld(name, tid)); return this;} private List_adp flds_list = List_adp_.new_();
|
||||
public Db_obj_ary_fxt Init_vals(Object... ary) {vals_list.Add(ary); return this;} private List_adp vals_list = List_adp_.new_();
|
||||
public Db_obj_ary_fxt Test_sql(String expd) {
|
||||
Sql_qry_wtr_ansi cmd_wtr = (Sql_qry_wtr_ansi)Sql_qry_wtr_.I;
|
||||
String_bldr sb = String_bldr_.new_();
|
||||
crt.Flds_((Db_fld[])flds_list.Xto_ary_and_clear(Db_fld.class));
|
||||
crt.Vals_((Object[][])vals_list.Xto_ary_and_clear(Object[].class));
|
||||
crt.Flds_((Db_fld[])flds_list.To_ary_and_clear(Db_fld.class));
|
||||
crt.Vals_((Object[][])vals_list.To_ary_and_clear(Object[].class));
|
||||
cmd_wtr.Append_db_obj_ary(sb, crt);
|
||||
Tfds.Eq(expd, sb.Xto_str_and_clear());
|
||||
return this;
|
||||
|
||||
@@ -20,27 +20,27 @@ interface Db_sqlbldr {}
|
||||
public class Db_sqlbldr__sqlite implements Db_sqlbldr {
|
||||
private final Bry_bfr tmp_bfr = Bry_bfr.reset_(1024);
|
||||
public String Bld_create_idx(Db_meta_idx idx) {
|
||||
tmp_bfr.Add_str_ascii("CREATE ");
|
||||
tmp_bfr.Add_str_a7("CREATE ");
|
||||
if (idx.Unique())
|
||||
tmp_bfr.Add_str_ascii("UNIQUE ");
|
||||
tmp_bfr.Add_str_ascii("INDEX ");
|
||||
tmp_bfr.Add_str_ascii("IF NOT EXISTS ");
|
||||
tmp_bfr.Add_str_ascii(idx.Name());
|
||||
tmp_bfr.Add_str_ascii(" ON ");
|
||||
tmp_bfr.Add_str_ascii(idx.Tbl());
|
||||
tmp_bfr.Add_str_ascii(" (");
|
||||
tmp_bfr.Add_str_a7("UNIQUE ");
|
||||
tmp_bfr.Add_str_a7("INDEX ");
|
||||
tmp_bfr.Add_str_a7("IF NOT EXISTS ");
|
||||
tmp_bfr.Add_str_a7(idx.Name());
|
||||
tmp_bfr.Add_str_a7(" ON ");
|
||||
tmp_bfr.Add_str_a7(idx.Tbl());
|
||||
tmp_bfr.Add_str_a7(" (");
|
||||
String[] flds = idx.Flds();
|
||||
int flds_len = flds.length;
|
||||
for (int i = 0; i < flds_len; ++i) {
|
||||
String fld = flds[i];
|
||||
if (i != 0) tmp_bfr.Add_str_ascii(", ");
|
||||
tmp_bfr.Add_str_ascii(fld);
|
||||
if (i != 0) tmp_bfr.Add_str_a7(", ");
|
||||
tmp_bfr.Add_str_a7(fld);
|
||||
}
|
||||
tmp_bfr.Add_str_ascii(");");
|
||||
tmp_bfr.Add_str_a7(");");
|
||||
return tmp_bfr.Xto_str_and_clear();
|
||||
}
|
||||
public String Bld_create_tbl(Db_meta_tbl tbl) {
|
||||
tmp_bfr.Add_str_ascii("CREATE TABLE IF NOT EXISTS ").Add_str_ascii(tbl.Name()).Add_byte_nl();
|
||||
tmp_bfr.Add_str_a7("CREATE TABLE IF NOT EXISTS ").Add_str_a7(tbl.Name()).Add_byte_nl();
|
||||
Db_meta_fld[] flds = tbl.Flds();
|
||||
int flds_len = flds.length;
|
||||
for (int i = 0; i < flds_len; ++i) {
|
||||
@@ -49,11 +49,11 @@ public class Db_sqlbldr__sqlite implements Db_sqlbldr {
|
||||
Bld_fld(tmp_bfr, fld);
|
||||
tmp_bfr.Add_byte_nl();
|
||||
}
|
||||
tmp_bfr.Add_str_ascii(");");
|
||||
tmp_bfr.Add_str_a7(");");
|
||||
return tmp_bfr.Xto_str_and_clear();
|
||||
}
|
||||
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 ");
|
||||
tmp_bfr.Add_str_a7("ALTER TABLE ").Add_str_a7(tbl).Add_str_a7(" ADD ");
|
||||
Bld_fld(tmp_bfr, fld);
|
||||
tmp_bfr.Add_byte_semic();
|
||||
return tmp_bfr.Xto_str_and_clear();
|
||||
@@ -62,36 +62,36 @@ public class Db_sqlbldr__sqlite implements Db_sqlbldr {
|
||||
return String_.Format("DROP TABLE IF EXISTS {0};", tbl);
|
||||
}
|
||||
private void Bld_fld(Bry_bfr tmp_bfr, Db_meta_fld fld) {
|
||||
tmp_bfr.Add_str_ascii(fld.Name()).Add_byte_space();
|
||||
tmp_bfr.Add_str_a7(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 ");
|
||||
tmp_bfr.Add_str_a7(fld.Nullable() ? "NULL " : "NOT NULL ");
|
||||
if (fld.Default_value() != Db_meta_fld.Default_value_null) {
|
||||
tmp_bfr.Add_str_ascii("DEFAULT ");
|
||||
tmp_bfr.Add_str_a7("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()));
|
||||
tmp_bfr.Add_str_u8(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.Autonum()) tmp_bfr.Add_str_ascii("AUTOINCREMENT ");
|
||||
if (fld.Primary()) tmp_bfr.Add_str_a7("PRIMARY KEY ");
|
||||
if (fld.Autonum()) tmp_bfr.Add_str_a7("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;
|
||||
case Db_meta_fld.Tid_short: tmp_bfr.Add_str_ascii("smallint"); break;
|
||||
case Db_meta_fld.Tid_int: tmp_bfr.Add_str_ascii("integer"); break; // NOTE: must be integer, not int, else "int PRIMARY KEY AUTONUMBER" will fail; DATE:2015-02-12
|
||||
case Db_meta_fld.Tid_long: tmp_bfr.Add_str_ascii("bigint"); break;
|
||||
case Db_meta_fld.Tid_float: tmp_bfr.Add_str_ascii("float"); break;
|
||||
case Db_meta_fld.Tid_double: tmp_bfr.Add_str_ascii("double"); break;
|
||||
case Db_meta_fld.Tid_str: tmp_bfr.Add_str_ascii("varchar(").Add_int_variable(len).Add_byte(Byte_ascii.Paren_end); break;
|
||||
case Db_meta_fld.Tid_text: tmp_bfr.Add_str_ascii("text"); break;
|
||||
case Db_meta_fld.Tid_bry: tmp_bfr.Add_str_ascii("blob"); break;
|
||||
case Db_meta_fld.Tid_bool: tmp_bfr.Add_str_a7("boolean"); break;
|
||||
case Db_meta_fld.Tid_byte: tmp_bfr.Add_str_a7("tinyint"); break;
|
||||
case Db_meta_fld.Tid_short: tmp_bfr.Add_str_a7("smallint"); break;
|
||||
case Db_meta_fld.Tid_int: tmp_bfr.Add_str_a7("integer"); break; // NOTE: must be integer, not int, else "int PRIMARY KEY AUTONUMBER" will fail; DATE:2015-02-12
|
||||
case Db_meta_fld.Tid_long: tmp_bfr.Add_str_a7("bigint"); break;
|
||||
case Db_meta_fld.Tid_float: tmp_bfr.Add_str_a7("float"); break;
|
||||
case Db_meta_fld.Tid_double: tmp_bfr.Add_str_a7("double"); break;
|
||||
case Db_meta_fld.Tid_str: tmp_bfr.Add_str_a7("varchar(").Add_int_variable(len).Add_byte(Byte_ascii.Paren_end); break;
|
||||
case Db_meta_fld.Tid_text: tmp_bfr.Add_str_a7("text"); break;
|
||||
case Db_meta_fld.Tid_bry: tmp_bfr.Add_str_a7("blob"); break;
|
||||
default: throw Err_.unhandled(tid);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,8 +17,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.dbs.sqls; import gplx.*; import gplx.dbs.*;
|
||||
public class Sql_from {
|
||||
public ListAdp Tbls() {return tbls;} ListAdp tbls = ListAdp_.new_();
|
||||
public Sql_tbl_src BaseTable() {return (Sql_tbl_src)tbls.FetchAt(0);}
|
||||
public List_adp Tbls() {return tbls;} List_adp tbls = List_adp_.new_();
|
||||
public Sql_tbl_src BaseTable() {return (Sql_tbl_src)tbls.Get_at(0);}
|
||||
public static Sql_from new_(Sql_tbl_src baseTable) {
|
||||
Sql_from rv = new Sql_from();
|
||||
rv.tbls.Add(baseTable);
|
||||
|
||||
@@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.dbs.sqls; import gplx.*; import gplx.dbs.*;
|
||||
public class Sql_group_by {
|
||||
public ListAdp Flds() {return flds;} ListAdp flds = ListAdp_.new_();
|
||||
public List_adp Flds() {return flds;} List_adp flds = List_adp_.new_();
|
||||
|
||||
public static Sql_group_by new_(String... ary) {
|
||||
Sql_group_by rv = new Sql_group_by();
|
||||
|
||||
@@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.dbs.sqls; import gplx.*; import gplx.dbs.*;
|
||||
public class Sql_order_by {
|
||||
public ListAdp Flds() {return flds;} ListAdp flds = ListAdp_.new_();
|
||||
public List_adp Flds() {return flds;} List_adp flds = List_adp_.new_();
|
||||
|
||||
public static Sql_order_by new_(Sql_order_by_itm... ary) {
|
||||
Sql_order_by rv = new Sql_order_by();
|
||||
|
||||
@@ -44,7 +44,7 @@ public class Sql_qry_wtr_ansi implements Sql_qry_wtr {
|
||||
if (cmd.Select() != null) {
|
||||
sb.Add_many("INSERT INTO ", cmd.Base_table(), " (");
|
||||
for (int i = 0; i < cmd.Cols().Count(); i++) {
|
||||
Sql_select_fld_base fld = cmd.Cols().FetchAt(i);
|
||||
Sql_select_fld_base fld = cmd.Cols().Get_at(i);
|
||||
sb.Add(fld.Alias());
|
||||
sb.Add(i == cmd.Cols().Count() - 1 ? ") " : ", ");
|
||||
}
|
||||
@@ -55,13 +55,13 @@ public class Sql_qry_wtr_ansi implements Sql_qry_wtr {
|
||||
int last = arg_count - 1;
|
||||
sb.Add_many("INSERT INTO ", cmd.Base_table(), " (");
|
||||
for (int i = 0; i < arg_count; i++) {
|
||||
KeyVal pair = cmd.Args().FetchAt(i);
|
||||
KeyVal pair = cmd.Args().Get_at(i);
|
||||
this.Xto_sql_col(sb, pair.Key_as_obj());
|
||||
sb.Add(i == last ? ")" : ", ");
|
||||
}
|
||||
sb.Add(" VALUES (");
|
||||
for (int i = 0; i < arg_count; i++) {
|
||||
KeyVal pair = cmd.Args().FetchAt(i);
|
||||
KeyVal pair = cmd.Args().Get_at(i);
|
||||
Db_arg arg = (Db_arg)pair.Val();
|
||||
this.Bld_val(sb, arg);
|
||||
sb.Add(i == last ? ")" : ", ");
|
||||
@@ -72,7 +72,7 @@ public class Sql_qry_wtr_ansi implements Sql_qry_wtr {
|
||||
int arg_count = cmd.Args().Count(); if (arg_count == 0) throw Err_.new_("Db_qry_update has no columns").Add("base_table", cmd.Base_table());
|
||||
sb.Add_many("UPDATE ", cmd.Base_table(), " SET ");
|
||||
for (int i = 0; i < arg_count; i++) {
|
||||
KeyVal pair = cmd.Args().FetchAt(i);
|
||||
KeyVal pair = cmd.Args().Get_at(i);
|
||||
if (i > 0) sb.Add(", ");
|
||||
this.Xto_sql_col(sb, pair.Key_as_obj());
|
||||
sb.Add("=");
|
||||
@@ -87,7 +87,7 @@ public class Sql_qry_wtr_ansi implements Sql_qry_wtr {
|
||||
Sql_select_fld_list flds = cmd.Cols().Flds();
|
||||
if (flds.Count() == 0) sb.Add("*");
|
||||
for (int i = 0; i < flds.Count(); i++) {
|
||||
Sql_select_fld_base fld = (Sql_select_fld_base)flds.FetchAt(i);
|
||||
Sql_select_fld_base fld = (Sql_select_fld_base)flds.Get_at(i);
|
||||
if (i > 0) sb.Add(", ");
|
||||
this.Xto_sql_col(sb, fld.XtoSql());
|
||||
}
|
||||
@@ -103,7 +103,7 @@ public class Sql_qry_wtr_ansi implements Sql_qry_wtr {
|
||||
if (groupBy == null) return;
|
||||
sb.Add(" GROUP BY ");
|
||||
for (int i = 0; i < groupBy.Flds().Count(); i++) {
|
||||
String item = (String)groupBy.Flds().FetchAt(i);
|
||||
String item = (String)groupBy.Flds().Get_at(i);
|
||||
if (i > 0) sb.Add(", ");
|
||||
sb.Add(item);
|
||||
}
|
||||
@@ -112,7 +112,7 @@ public class Sql_qry_wtr_ansi implements Sql_qry_wtr {
|
||||
if (orderBy == null) return;
|
||||
sb.Add(" ORDER BY ");
|
||||
for (int i = 0; i < orderBy.Flds().Count(); i++) {
|
||||
Sql_order_by_itm item = (Sql_order_by_itm)orderBy.Flds().FetchAt(i);
|
||||
Sql_order_by_itm item = (Sql_order_by_itm)orderBy.Flds().Get_at(i);
|
||||
if (i > 0) sb.Add(", ");
|
||||
sb.Add(item.XtoSql());
|
||||
}
|
||||
@@ -129,7 +129,7 @@ public class Sql_qry_wtr_ansi implements Sql_qry_wtr {
|
||||
);
|
||||
String tblAliasForJoin = tbl.Alias() == null ? tbl.TblName() : tbl.Alias();
|
||||
for (int i = 0; i < tbl.JoinLinks().Count(); i++) {
|
||||
Sql_join_itm joinLink = (Sql_join_itm)tbl.JoinLinks().FetchAt(i);
|
||||
Sql_join_itm joinLink = (Sql_join_itm)tbl.JoinLinks().Get_at(i);
|
||||
String conjunction = i == 0 ? " ON " : " AND ";
|
||||
sb.Add_many(conjunction, joinLink.SrcTbl(), ".", joinLink.SrcFld(), "=", tblAliasForJoin, ".", joinLink.TrgFldOrSrcFld());
|
||||
}
|
||||
|
||||
@@ -21,12 +21,12 @@ import gplx.dbs.engines.tdbs.*;
|
||||
public class Sql_select_fld_list {
|
||||
public int Count() {return hash.Count();}
|
||||
public void Add(Sql_select_fld_base fld) {hash.Add(fld.Alias(), fld);}
|
||||
public Sql_select_fld_base FetchAt(int i) {return (Sql_select_fld_base)hash.FetchAt(i);}
|
||||
public Sql_select_fld_base FetchOrNull(String k) {return (Sql_select_fld_base)hash.Fetch(k);}
|
||||
public Sql_select_fld_base Get_at(int i) {return (Sql_select_fld_base)hash.Get_at(i);}
|
||||
public Sql_select_fld_base FetchOrNull(String k) {return (Sql_select_fld_base)hash.Get_by(k);}
|
||||
public GfoFldList XtoGfoFldLst(TdbTable tbl) {
|
||||
GfoFldList rv = GfoFldList_.new_();
|
||||
for (int i = 0; i < this.Count(); i++) {
|
||||
Sql_select_fld_base selectFld = this.FetchAt(i);
|
||||
Sql_select_fld_base selectFld = this.Get_at(i);
|
||||
GfoFld fld = tbl.Flds().FetchOrNull(selectFld.Fld());
|
||||
if (fld == null) throw Err_.new_("fld not found in tbl").Add("fldName", selectFld.Fld()).Add("tblName", tbl.Name()).Add("tblFlds", tbl.Flds().XtoStr());
|
||||
if (rv.Has(selectFld.Alias())) throw Err_.new_("alias is not unique").Add("fldName", selectFld.Fld()).Add("flds", rv.XtoStr());
|
||||
@@ -39,7 +39,7 @@ public class Sql_select_fld_list {
|
||||
int len = this.Count();
|
||||
String[] rv = new String[len];
|
||||
for (int i = 0; i < len; i++) {
|
||||
Sql_select_fld_base fld = this.FetchAt(i);
|
||||
Sql_select_fld_base fld = this.Get_at(i);
|
||||
rv[i] = fld.Fld();
|
||||
}
|
||||
return rv;
|
||||
@@ -47,11 +47,11 @@ public class Sql_select_fld_list {
|
||||
public String XtoStr() {
|
||||
String_bldr sb = String_bldr_.new_();
|
||||
for (int i = 0; i < this.Count(); i++) {
|
||||
Sql_select_fld_base fld = this.FetchAt(i);
|
||||
Sql_select_fld_base fld = this.Get_at(i);
|
||||
sb.Add_fmt("{0},{1}|", fld.Fld(), fld.Alias());
|
||||
}
|
||||
return sb.XtoStr();
|
||||
}
|
||||
OrderedHash hash = OrderedHash_.new_();
|
||||
Ordered_hash hash = Ordered_hash_.new_();
|
||||
public static Sql_select_fld_list new_() {return new Sql_select_fld_list();} Sql_select_fld_list() {}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ package gplx.dbs.sqls; import gplx.*; import gplx.dbs.*;
|
||||
import gplx.core.strings.*;
|
||||
public class Sql_tbl_src {
|
||||
public Sql_join_itmType JoinType() {return type;} public Sql_tbl_src JoinType_(Sql_join_itmType v) {this.type = v; return this;} Sql_join_itmType type = Sql_join_itmType.Inner;
|
||||
public ListAdp JoinLinks() {return joinLinks;} ListAdp joinLinks = ListAdp_.new_();
|
||||
public List_adp JoinLinks() {return joinLinks;} List_adp joinLinks = List_adp_.new_();
|
||||
public String TblName() {return tblName;} public Sql_tbl_src TblName_(String s) {tblName = s; return this;} private String tblName;
|
||||
public String Alias() {return alias;} public Sql_tbl_src Alias_(String s) {alias = s; return this;} private String alias;
|
||||
public void XtoSql(String_bldr sb) {
|
||||
|
||||
@@ -50,9 +50,9 @@ public class Db_cmd_backup implements GfoInvkAble {
|
||||
this.InitVars();
|
||||
Io_url bkpCmdFil = bkpDir.GenSubFil_ary("backup_", dbName, ".cmd");
|
||||
// Io_url bkpCmdFil = Io_url_.new_dir_("/home/").GenSubFil_ary("backup_", dbName, ".cmd"); // LNX: uncomment
|
||||
Io_mgr._.SaveFilStr_args(bkpCmdFil, cmdText).Exec(); // explicitly state utf8;
|
||||
Io_mgr.I.SaveFilStr_args(bkpCmdFil, cmdText).Exec(); // explicitly state utf8;
|
||||
ProcessAdp.run_wait_(bkpCmdFil);
|
||||
Io_mgr._.DeleteFil(bkpCmdFil);
|
||||
Io_mgr.I.DeleteFil(bkpCmdFil);
|
||||
return this;
|
||||
}
|
||||
@gplx.Internal protected Db_cmd_backup InitVars() {
|
||||
|
||||
@@ -18,14 +18,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.stores; import gplx.*;
|
||||
public class DbMaprItm {
|
||||
public String TableName() {return tableName;} public DbMaprItm TableName_(String val) {tableName = val; return this;} private String tableName;
|
||||
public OrderedHash Flds() {return flds;} OrderedHash flds = OrderedHash_.new_();
|
||||
public HashAdp ContextFlds() {return contextFlds;} HashAdp contextFlds = HashAdp_.new_();
|
||||
public HashAdp ConstantFlds() {return constantFlds;} HashAdp constantFlds = HashAdp_.new_();
|
||||
public ListAdp Subs() {return subs;}
|
||||
public Ordered_hash Flds() {return flds;} Ordered_hash flds = Ordered_hash_.new_();
|
||||
public Hash_adp ContextFlds() {return contextFlds;} Hash_adp contextFlds = Hash_adp_.new_();
|
||||
public Hash_adp ConstantFlds() {return constantFlds;} Hash_adp constantFlds = Hash_adp_.new_();
|
||||
public List_adp Subs() {return subs;}
|
||||
|
||||
public DbMaprItm Flds_add(String objProp, String dbFld) {flds.Add(objProp, DbMaprArg.new_(objProp, dbFld)); return this;}
|
||||
public DbMaprItm ContextFlds_add(String s) {
|
||||
DbMaprArg arg = (DbMaprArg)flds.Fetch(s);
|
||||
DbMaprArg arg = (DbMaprArg)flds.Get_by(s);
|
||||
contextFlds.Add(arg.ObjProp(), arg);
|
||||
return this;
|
||||
}
|
||||
@@ -42,8 +42,8 @@ public class DbMaprItm {
|
||||
}
|
||||
throw Err_arg.notFound_key_("find", find);
|
||||
}
|
||||
public DbMaprArg Flds_get(String key) {return (DbMaprArg)flds.Fetch(key);}
|
||||
SrlObj proto; String key; ListAdp subs = ListAdp_.new_();
|
||||
public DbMaprArg Flds_get(String key) {return (DbMaprArg)flds.Get_by(key);}
|
||||
SrlObj proto; String key; List_adp subs = List_adp_.new_();
|
||||
public static DbMaprItm proto_(SrlObj proto, String key, String tableName) {
|
||||
DbMaprItm rv = new DbMaprItm();
|
||||
rv.proto = proto; rv.key = key; rv.tableName = tableName;
|
||||
|
||||
@@ -19,14 +19,14 @@ package gplx.stores; import gplx.*;
|
||||
public class DbMaprMgr {
|
||||
public DbMaprArg[] RootIndexFlds() {return rootIndexFlds;} public DbMaprMgr RootIndexFlds_(DbMaprArg... val) {rootIndexFlds = val; return this;} DbMaprArg[] rootIndexFlds;
|
||||
public DbMaprItm Root() {return root;} public DbMaprMgr Root_(DbMaprItm v) {root = v; return this;} DbMaprItm root;
|
||||
public ListAdp OwnerStack() {return ownerStack;} ListAdp ownerStack = ListAdp_.new_();
|
||||
public OrderedHash ContextVars() {return contextVars;} OrderedHash contextVars = OrderedHash_.new_();
|
||||
public ListAdp MaprStack() {return maprStack;} ListAdp maprStack = ListAdp_.new_();
|
||||
public List_adp OwnerStack() {return ownerStack;} List_adp ownerStack = List_adp_.new_();
|
||||
public Ordered_hash ContextVars() {return contextVars;} Ordered_hash contextVars = Ordered_hash_.new_();
|
||||
public List_adp MaprStack() {return maprStack;} List_adp maprStack = List_adp_.new_();
|
||||
public void EnvStack_add(DbMaprItm mapr, SrlObj gobj) {
|
||||
for (Object argObj : mapr.ContextFlds()) {
|
||||
DbMaprArg arg = (DbMaprArg)argObj;
|
||||
Object contextVal = GfoInvkAble_.InvkCmd((GfoInvkAble)gobj, arg.ObjProp());
|
||||
this.ContextVars().AddReplace(arg.DbFld(), contextVal);
|
||||
this.ContextVars().Add_if_dupe_use_nth(arg.DbFld(), contextVal);
|
||||
}
|
||||
this.OwnerStack().Add(gobj);
|
||||
this.MaprStack().Add(mapr);
|
||||
@@ -36,8 +36,8 @@ public class DbMaprMgr {
|
||||
DbMaprArg arg = (DbMaprArg)argObj;
|
||||
this.ContextVars().Del(arg.DbFld());
|
||||
}
|
||||
ListAdp_.DelAt_last(this.OwnerStack());
|
||||
ListAdp_.DelAt_last(this.MaprStack());
|
||||
List_adp_.DelAt_last(this.OwnerStack());
|
||||
List_adp_.DelAt_last(this.MaprStack());
|
||||
}
|
||||
public void Clear() {
|
||||
ownerStack.Clear();
|
||||
|
||||
@@ -109,8 +109,8 @@ public class DbMaprMgr_tst {
|
||||
Tfds.Eq(1, disc.Id());
|
||||
Tfds.Eq("name", disc.Name());
|
||||
Tfds.Eq(2, disc.Titles().Count());
|
||||
Tfds.Eq("title1", ((MockTitle)disc.Titles().FetchAt(0)).Name());
|
||||
Tfds.Eq("title2", ((MockTitle)disc.Titles().FetchAt(1)).Name());
|
||||
Tfds.Eq("title1", ((MockTitle)disc.Titles().Get_at(0)).Name());
|
||||
Tfds.Eq("title2", ((MockTitle)disc.Titles().Get_at(1)).Name());
|
||||
}
|
||||
@Test public void Load_deep() {
|
||||
rdr = rdr_();
|
||||
@@ -124,13 +124,13 @@ public class DbMaprMgr_tst {
|
||||
Tfds.Eq(1, disc.Id());
|
||||
Tfds.Eq("name", disc.Name());
|
||||
Tfds.Eq(1, disc.Titles().Count());
|
||||
MockTitle t = ((MockTitle)disc.Titles().FetchAt(0));
|
||||
MockTitle t = ((MockTitle)disc.Titles().Get_at(0));
|
||||
Tfds.Eq("title1", t.Name());
|
||||
Tfds.Eq("chapter1", ((MockChapter)t.Chapters().FetchAt(0)).Name());
|
||||
Tfds.Eq("chapter1", ((MockChapter)t.Chapters().Get_at(0)).Name());
|
||||
Tfds.Eq(1, t.Audios().Count());
|
||||
Tfds.Eq(1, t.Subtitles().Count());
|
||||
Tfds.Eq("audio1", ((MockStream)t.Audios().FetchAt(0)).Name());
|
||||
Tfds.Eq("subtitle1", ((MockStream)t.Subtitles().FetchAt(0)).Name());
|
||||
Tfds.Eq("audio1", ((MockStream)t.Audios().Get_at(0)).Name());
|
||||
Tfds.Eq("subtitle1", ((MockStream)t.Subtitles().Get_at(0)).Name());
|
||||
}
|
||||
DbMaprRdr rdr_() {
|
||||
DbMaprRdr rv = DbMaprRdr.new_(Db_conn_info_.Test, Db_crt_.eq_("disc_id", 1));
|
||||
|
||||
@@ -20,7 +20,7 @@ import gplx.core.criterias.*; import gplx.dbs.*;
|
||||
public class DbMaprRdr extends DataRdr_base implements SrlMgr {
|
||||
@Override public String NameOfNode() {return "DbMaprRdr";}
|
||||
@Override public Object StoreRoot(SrlObj subProto, String key) {
|
||||
mgr = (DbMaprMgr)this.EnvVars().FetchOrFail(DbMaprWtr.Key_Mgr);
|
||||
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_("criteria returned > 1 row").Add("criteria", rootCrt.XtoStr()).Add("subsCount", subsCount);
|
||||
@@ -30,8 +30,8 @@ public class DbMaprRdr extends DataRdr_base implements SrlMgr {
|
||||
mgr.Clear(); rowStack.Clear();
|
||||
return root;
|
||||
}
|
||||
@Override public void SrlList(String subPropKey, ListAdp list, SrlObj subProto, String itmKey) {
|
||||
DbMaprItm curMapr = (DbMaprItm)mgr.MaprStack().FetchAtLast();
|
||||
@Override public void SrlList(String subPropKey, List_adp list, SrlObj subProto, String itmKey) {
|
||||
DbMaprItm curMapr = (DbMaprItm)mgr.MaprStack().Get_at_last();
|
||||
DbMaprItm subMapr = curMapr.Subs_get(subPropKey);
|
||||
list.Clear();
|
||||
|
||||
@@ -43,12 +43,12 @@ public class DbMaprRdr extends DataRdr_base implements SrlMgr {
|
||||
GfoNde subRow = tbl.Subs().FetchAt_asGfoNde(i);
|
||||
mgr.EnvStack_add(subMapr, sub); rowStack.Add(subRow);
|
||||
sub.SrlObj_Srl(this); list.Add(sub);
|
||||
mgr.EnvStack_del(subMapr, sub); ListAdp_.DelAt_last(rowStack);
|
||||
mgr.EnvStack_del(subMapr, sub); List_adp_.DelAt_last(rowStack);
|
||||
}
|
||||
}
|
||||
Criteria MakeCrt(DbMaprMgr mgr, DbMaprItm mapr) {
|
||||
Criteria rv = null, cur = null;
|
||||
ListAdp list = GetIdxFlds(mgr, mapr);
|
||||
List_adp list = GetIdxFlds(mgr, mapr);
|
||||
for (Object kvObj : list) {
|
||||
KeyVal kv = (KeyVal)kvObj;
|
||||
cur = Db_crt_.eq_(kv.Key(), kv.Val());
|
||||
@@ -56,12 +56,12 @@ public class DbMaprRdr extends DataRdr_base implements SrlMgr {
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
ListAdp GetIdxFlds(DbMaprMgr mgr, DbMaprItm curMapr) {
|
||||
ListAdp rv = ListAdp_.new_();
|
||||
List_adp GetIdxFlds(DbMaprMgr mgr, DbMaprItm curMapr) {
|
||||
List_adp rv = List_adp_.new_();
|
||||
int maprStackCount = mgr.MaprStack().Count() - 0; // -1 b/c current is added to stack
|
||||
for (int i = 0; i < maprStackCount; i ++) {
|
||||
DbMaprItm mapr = (DbMaprItm)mgr.MaprStack().FetchAt(i);
|
||||
SrlObj gobj = (SrlObj)mgr.OwnerStack().FetchAt(i);
|
||||
DbMaprItm mapr = (DbMaprItm)mgr.MaprStack().Get_at(i);
|
||||
SrlObj gobj = (SrlObj)mgr.OwnerStack().Get_at(i);
|
||||
for (Object argObj : mapr.ContextFlds()) {
|
||||
DbMaprArg arg = (DbMaprArg)argObj;
|
||||
Object propVal = GfoInvkAble_.InvkCmd((GfoInvkAble)gobj, arg.ObjProp());
|
||||
@@ -76,7 +76,7 @@ public class DbMaprRdr extends DataRdr_base implements SrlMgr {
|
||||
}
|
||||
GfoNde GetTbl(DbMaprItm mapr, Criteria crit) {
|
||||
String key = mapr.TableName();
|
||||
GfoNde tblByRootCrt = GfoNde_.as_(tables.Fetch(key));
|
||||
GfoNde tblByRootCrt = GfoNde_.as_(tables.Get_by(key));
|
||||
if (tblByRootCrt == null) {
|
||||
DataRdr dbRdr = null;
|
||||
try {
|
||||
@@ -98,8 +98,8 @@ public class DbMaprRdr extends DataRdr_base implements SrlMgr {
|
||||
rowStack.Add(tbl.Subs().FetchAt_asGfoNde(i));
|
||||
}
|
||||
@Override public Object Read(String key) {
|
||||
DbMaprItm mapr = (DbMaprItm)mgr.MaprStack().FetchAtLast();
|
||||
GfoNde row = (GfoNde)rowStack.FetchAtLast();
|
||||
DbMaprItm mapr = (DbMaprItm)mgr.MaprStack().Get_at_last();
|
||||
GfoNde row = (GfoNde)rowStack.Get_at_last();
|
||||
DbMaprArg arg = mapr.Flds_get(key);
|
||||
Object dbVal = null; try {dbVal = row.Read(arg.DbFld());} catch (Exception exc) {throw Err_.err_(exc, "failed to read dbVal from row").Add("key", key).Add("fld", arg.DbFld());}
|
||||
return dbVal;
|
||||
@@ -111,9 +111,9 @@ public class DbMaprRdr extends DataRdr_base implements SrlMgr {
|
||||
@Override public Object ReadAt(int i) {throw Err_.not_implemented_();}
|
||||
@Override public KeyVal KeyValAt(int i) {throw Err_.not_implemented_();}
|
||||
@Override public SrlMgr SrlMgr_new(Object o) {return new DbMaprRdr();}
|
||||
HashAdp tables = HashAdp_.new_();
|
||||
Hash_adp tables = Hash_adp_.new_();
|
||||
Db_conn conn; Criteria rootCrt;
|
||||
DbMaprMgr mgr; ListAdp rowStack = ListAdp_.new_();
|
||||
DbMaprMgr mgr; List_adp rowStack = List_adp_.new_();
|
||||
public static DbMaprRdr new_(Db_conn_info dbInfo, Criteria rootCrt) {
|
||||
DbMaprRdr rv = new DbMaprRdr();
|
||||
rv.conn = Db_conn_pool.I.Get_or_new(dbInfo); rv.rootCrt = rootCrt;
|
||||
|
||||
@@ -21,14 +21,14 @@ import gplx.dbs.*; import gplx.dbs.qrys.*;
|
||||
public class DbMaprWtr extends DataWtr_base implements DataWtr {
|
||||
public void InitWtr(String key, Object val) {}
|
||||
@Override public Object StoreRoot(SrlObj root, String key) {
|
||||
mgr = (DbMaprMgr)this.EnvVars().FetchOrFail(DbMaprWtr.Key_Mgr);
|
||||
mgr = (DbMaprMgr)this.EnvVars().Get_by_or_fail(DbMaprWtr.Key_Mgr);
|
||||
DbMaprWtrUtl.PurgeObjTree(root, mgr, conn);
|
||||
WriteGfoObj(root, mgr.Root());
|
||||
mgr.Clear();
|
||||
return null;
|
||||
}
|
||||
@Override public void SrlList(String subPropKey, ListAdp list, SrlObj subProto, String itmKey) {
|
||||
DbMaprItm ownerMapr = (DbMaprItm)mgr.MaprStack().FetchAtLast();
|
||||
@Override public void SrlList(String subPropKey, List_adp list, SrlObj subProto, String itmKey) {
|
||||
DbMaprItm ownerMapr = (DbMaprItm)mgr.MaprStack().Get_at_last();
|
||||
DbMaprItm subMapr = ownerMapr.Subs_get(subPropKey);
|
||||
|
||||
for (Object subObj : list) {
|
||||
@@ -47,8 +47,8 @@ public class DbMaprWtr extends DataWtr_base implements DataWtr {
|
||||
void WriteContextFlds() {
|
||||
int maprStackCount = mgr.MaprStack().Count() - 1; // -1 b/c current is added to stack
|
||||
for (int i = 0; i < maprStackCount; i ++) {
|
||||
DbMaprItm mapr = (DbMaprItm)mgr.MaprStack().FetchAt(i);
|
||||
SrlObj gobj = (SrlObj)mgr.OwnerStack().FetchAt(i);
|
||||
DbMaprItm mapr = (DbMaprItm)mgr.MaprStack().Get_at(i);
|
||||
SrlObj gobj = (SrlObj)mgr.OwnerStack().Get_at(i);
|
||||
for (Object argObj : mapr.ContextFlds()) {
|
||||
DbMaprArg arg = (DbMaprArg)argObj;
|
||||
Object argVal = GfoInvkAble_.InvkCmd((GfoInvkAble)gobj, arg.ObjProp());
|
||||
@@ -62,7 +62,7 @@ public class DbMaprWtr extends DataWtr_base implements DataWtr {
|
||||
insertCmd = null;
|
||||
}
|
||||
@Override public void WriteData(String name, Object val) {
|
||||
DbMaprItm ownerMapr = (DbMaprItm)mgr.MaprStack().FetchAtLast();
|
||||
DbMaprItm ownerMapr = (DbMaprItm)mgr.MaprStack().Get_at_last();
|
||||
String fld = ""; try {fld = ownerMapr.Flds_get(name).DbFld();} catch (Exception exc) {throw Err_.err_(exc, "failed to fetch fld from mapr").Add("key", name);}
|
||||
WriteDataVal(fld, val);
|
||||
}
|
||||
|
||||
@@ -29,13 +29,13 @@ public class Db_data_rdr extends DataRdr_base implements DataRdr {
|
||||
@Override public int FieldCount() {return fieldCount;}
|
||||
@Override public String KeyAt(int i) {
|
||||
String rv = null;
|
||||
try {rv = rdr.getMetaData().getColumnLabel(i + ListAdp_.Base1);}
|
||||
try {rv = rdr.getMetaData().getColumnLabel(i + List_adp_.Base1);}
|
||||
catch (SQLException e) {Err_.err_(e, "get columnName failed").Add("i", i).Add("commandText", commandText);}
|
||||
return rv;
|
||||
}
|
||||
@Override public Object ReadAt(int i) {
|
||||
Object rv;
|
||||
try {rv = rdr.getObject(i + ListAdp_.Base1);} catch(Exception exc) {throw Err_.new_("could not read val from dataReader; idx not found or rdr not open").Add("idx", i).Add("sql", commandText);}
|
||||
try {rv = rdr.getObject(i + List_adp_.Base1);} catch(Exception exc) {throw Err_.new_("could not read val from dataReader; idx not found or rdr not open").Add("idx", i).Add("sql", commandText);}
|
||||
return rv;
|
||||
}
|
||||
@Override public Object Read(String key) {
|
||||
|
||||
@@ -19,7 +19,7 @@ package gplx.stores; import gplx.*;
|
||||
class MockDisc implements SrlObj, GfoInvkAble {
|
||||
public int Id() {return id;} public MockDisc Id_(int val) {id = val; return this;} int id; public static final String id_idk = "id";
|
||||
public String Name() {return name;} public MockDisc Name_(String val) {name = val; return this;} private String name; public static final String name_idk = "name";
|
||||
public ListAdp Titles() {return titles;} ListAdp titles = ListAdp_.new_(); public static final String titles_idk = "titles";
|
||||
public List_adp Titles() {return titles;} List_adp titles = List_adp_.new_(); public static final String titles_idk = "titles";
|
||||
public static final MockDisc _ = new MockDisc(); MockDisc() {}
|
||||
public SrlObj SrlObj_New(Object o) {return new MockDisc();}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
@@ -37,7 +37,7 @@ class MockDisc implements SrlObj, GfoInvkAble {
|
||||
// if (String_.Eq(subMsg.Key(), titles_idk)) DoIt(ctx, ikey, k, subMsg, titles, MockTitle._, "title");
|
||||
// }
|
||||
// }
|
||||
// public static void DoIt(GfsCtx ctx, int ikey, String k, GfoMsg m, ListAdp list, Object o, String subKey) {
|
||||
// public static void DoIt(GfsCtx ctx, int ikey, String k, GfoMsg m, List_adp list, Object o, String subKey) {
|
||||
// }
|
||||
public void SrlObj_Srl(SrlMgr mgr) {
|
||||
id = mgr.SrlIntOr(id_idk, id);
|
||||
@@ -52,9 +52,9 @@ class MockDisc implements SrlObj, GfoInvkAble {
|
||||
class MockTitle implements SrlObj, GfoInvkAble {
|
||||
public int Id() {return id;} public MockTitle Id_(int val) {id = val; return this;} int id; public static final String id_idk = "id";
|
||||
public String Name() {return name;} public MockTitle Name_(String val) {name = val; return this;} private String name; public static final String name_idk = "name";
|
||||
public ListAdp Chapters() {return chapters;} ListAdp chapters = ListAdp_.new_(); public static final String chapters_idk = "chapters";
|
||||
public ListAdp Audios() {return audios;} ListAdp audios = ListAdp_.new_(); public static final String audios_idk = "audios";
|
||||
public ListAdp Subtitles() {return subtitles;} ListAdp subtitles = ListAdp_.new_(); public static final String subtitles_idk = "subtitles";
|
||||
public List_adp Chapters() {return chapters;} List_adp chapters = List_adp_.new_(); public static final String chapters_idk = "chapters";
|
||||
public List_adp Audios() {return audios;} List_adp audios = List_adp_.new_(); public static final String audios_idk = "audios";
|
||||
public List_adp Subtitles() {return subtitles;} List_adp subtitles = List_adp_.new_(); public static final String subtitles_idk = "subtitles";
|
||||
public MockTitle Disc_(MockDisc disc) {disc.Titles().Add(this); return this;}
|
||||
public static MockTitle new_() {
|
||||
MockTitle rv = new MockTitle();
|
||||
@@ -111,7 +111,7 @@ class MockChapter implements SrlObj, GfoInvkAble {
|
||||
class MockStream implements SrlObj, GfoInvkAble {
|
||||
public int Id() {return id;} public MockStream Id_(int val) {id = val; return this;} int id; public static final String id_idk = "id";
|
||||
public String Name() {return name;} public MockStream Name_(String val) {name = val; return this;} private String name; public static final String name_idk = "name";
|
||||
public MockStream Title_(ListAdp list) {list.Add(this); return this;}
|
||||
public MockStream Title_(List_adp list) {list.Add(this); return this;}
|
||||
public static final MockStream _ = new MockStream(); MockStream() {}
|
||||
public static MockStream new_() {
|
||||
MockStream rv = new MockStream();
|
||||
|
||||
@@ -18,15 +18,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.dbs; import gplx.*;
|
||||
public class GfoNdeTstr {
|
||||
public static void tst_ValsByCol(GfoNde nde, String fld, Object... expdAry) {
|
||||
ListAdp expd = ListAdp_.new_();
|
||||
List_adp expd = List_adp_.new_();
|
||||
for (int i = 0; i < expdAry.length; i++) {
|
||||
expd.Add(Object_.Xto_str_strict_or_empty(expdAry[i]));
|
||||
}
|
||||
ListAdp actl = ListAdp_.new_();
|
||||
List_adp actl = List_adp_.new_();
|
||||
for (int i = 0; i < nde.Subs().Count(); i++) {
|
||||
GfoNde sub = nde.Subs().FetchAt_asGfoNde(i);
|
||||
actl.Add(Object_.Xto_str_strict_or_empty(sub.Read(fld)));
|
||||
}
|
||||
Tfds.Eq_ary(expd.XtoStrAry(), actl.XtoStrAry());
|
||||
Tfds.Eq_ary(expd.To_str_ary(), actl.To_str_ary());
|
||||
}
|
||||
}
|
||||
@@ -180,7 +180,7 @@ public class SqliteDbMain {
|
||||
}
|
||||
}
|
||||
void Iterate_dir(Io_url dir) {
|
||||
Io_url[] urls = Io_mgr._.QueryDir_args(dir).DirInclude_().ExecAsUrlAry();
|
||||
Io_url[] urls = Io_mgr.I.QueryDir_args(dir).DirInclude_().ExecAsUrlAry();
|
||||
int urls_len = urls.length;
|
||||
ConsoleAdp._.WriteLine(dir.Raw());
|
||||
boolean is_root = false;
|
||||
@@ -208,7 +208,7 @@ public class SqliteDbMain {
|
||||
}
|
||||
void Insert_file(Io_url url) {
|
||||
if (String_.EqNot(url.Ext(), ".csv")) return;
|
||||
String raw = Io_mgr._.LoadFilStr(url);
|
||||
String raw = Io_mgr.I.LoadFilStr(url);
|
||||
String[] lines = String_.SplitLines_nl(raw);
|
||||
int lines_len = lines.length;
|
||||
for (int i = 0; i < lines_len; i++) {
|
||||
@@ -225,8 +225,8 @@ public class SqliteDbMain {
|
||||
if (flds_len == 4)
|
||||
stmt.setString(2, flds[3]);
|
||||
if (flds_len > 4) {
|
||||
stmt.setInt(3, Bry_.new_ascii_(flds[3])[0] - 32);
|
||||
byte[] orig = Bry_.new_ascii_(flds[4]);
|
||||
stmt.setInt(3, Bry_.new_a7(flds[3])[0] - 32);
|
||||
byte[] orig = Bry_.new_a7(flds[4]);
|
||||
int orig_mode = orig[0] - Byte_ascii.Num_0;
|
||||
int comma_pos = Bry_finder.Find_fwd(orig, Byte_ascii.Comma);
|
||||
int orig_w = Bry_.Xto_int_or(orig, 2, comma_pos, -1);
|
||||
|
||||
Reference in New Issue
Block a user