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-06-28 23:29:30 -04:00
parent bf44bcf3c6
commit d858b74d64
254 changed files with 2058 additions and 1191 deletions

View File

@@ -44,7 +44,8 @@ public class Db_conn {
public void Ddl_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... idxs) {engine.Ddl_create_idx(usr_dlg, idxs);}
public void Ddl_append_fld(String tbl, Db_meta_fld fld) {engine.Ddl_append_fld(tbl, fld);}
public void Ddl_delete_tbl(String tbl) {engine.Ddl_delete_tbl(tbl);}
public boolean Meta_tbl_exists(String tbl) {return engine.Meta_tbl_exists(tbl);}
public boolean Meta_tbl_exists(String tbl) {return engine.Meta_tbl_exists(tbl);}
public boolean Meta_fld_exists(String tbl, String fld) {return engine.Meta_fld_exists(tbl, fld);}
public void Rls_reg(RlsAble rls) {rls_list.Add(rls);}
public void Rls_conn() {
int len = rls_list.Count();
@@ -56,7 +57,7 @@ public class Db_conn {
Db_conn_pool.I.Del(engine.Conn_info());
}
public int Exec_sql(String sql) {return this.Exec_qry(Db_qry_sql.dml_(sql));}
public Db_rdr Exec_sql_as_rdr2(String sql) {return this.Stmt_new(Db_qry_sql.dml_(sql)).Exec_select__rls_auto();}
public Db_rdr Exec_sql_as_rdr_v2(String sql) {return this.Stmt_new(Db_qry_sql.dml_(sql)).Exec_select__rls_auto();}
public int Exec_sql_plog_ntx(String msg, String sql) {return Exec_sql_plog(Bool_.N, msg, sql);}
public int Exec_sql_plog_txn(String msg, String sql) {return Exec_sql_plog(Bool_.Y, msg, sql);}
public int Exec_sql_plog(boolean txn, String msg, String sql) {

View File

@@ -17,20 +17,31 @@ 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 autonum, Object default_value) {
public Db_meta_fld(String name, int tid, int len) {
this.name = name; this.tid = tid; this.len = len;
this.nullable = nullable; this.primary = primary; this.autonum = autonum; this.default_value = default_value;
this.nullable = false; this.primary = false; this.autonum = false; this.default_val = Default_value_null;
}
public int Tid() {return tid;} private final int tid;
public String Name() {return name;} private final String name;
public int Len() {return len;} private final int len;
public boolean Nullable() {return nullable;} private final boolean nullable;
public boolean Primary() {return primary;} private final boolean primary;
public boolean Autonum() {return autonum;} private final boolean autonum;
public Object Default_value() {return default_value;} private final Object default_value;
public boolean Nullable() {return nullable;} public Db_meta_fld Nullable_y_() {nullable = true; return this;} private boolean nullable;
public boolean Primary() {return primary;} public Db_meta_fld Primary_y_() {primary = true; return this;} private boolean primary;
public boolean Autonum() {return autonum;} public Db_meta_fld Autonum_y_() {autonum = true; return this;} private boolean autonum;
public Object Default() {return default_val;} public Db_meta_fld Default_(Object v) {default_val = v; return this;} private Object default_val;
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, Tid_decimal = 10, Tid_date = 11;
public static final String Key_null = null;
public static final int Len_null = -1;
public static final String[] Ary_empy = String_.Ary_empty;
public static final Object Default_value_null = null;
public static final String[] Ary_empty = String_.Ary_empty;
public static Db_meta_fld new_bool(String name) {return new Db_meta_fld(name, Tid_bool , Len_null);}
public static Db_meta_fld new_byte(String name) {return new Db_meta_fld(name, Tid_byte , Len_null);}
public static Db_meta_fld new_short(String name) {return new Db_meta_fld(name, Tid_short , Len_null);}
public static Db_meta_fld new_int(String name) {return new Db_meta_fld(name, Tid_int , Len_null);}
public static Db_meta_fld new_long(String name) {return new Db_meta_fld(name, Tid_long , Len_null);}
public static Db_meta_fld new_float(String name) {return new Db_meta_fld(name, Tid_float , Len_null);}
public static Db_meta_fld new_double(String name) {return new Db_meta_fld(name, Tid_double, Len_null);}
public static Db_meta_fld new_text(String name) {return new Db_meta_fld(name, Tid_text , Len_null);}
public static Db_meta_fld new_bry(String name) {return new Db_meta_fld(name, Tid_bry , Len_null);}
public static Db_meta_fld new_str(String name, int len) {return new Db_meta_fld(name, Tid_str , len);}
}

View File

@@ -20,7 +20,8 @@ public class Db_meta_fld_list {
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.Get_by(name);}
public Db_meta_fld Get_by(String name) {return (Db_meta_fld)flds.Get_by(name);}
public Db_meta_fld Get_at(int idx) {return (Db_meta_fld)flds.Get_at(idx);}
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() {
@@ -51,34 +52,29 @@ public class Db_meta_fld_list {
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);}
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_autonum(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_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_pkey(String name, int len) {return Add(name, Db_meta_fld.Tid_str, len, Bool_.N, Bool_.Y, Bool_.N, Db_meta_fld.Default_value_null);}
public String Add_str_null(String name, int len) {return Add(name, Db_meta_fld.Tid_str, len, Bool_.Y, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);}
public String Add_bool(String name) {return Add(Db_meta_fld.new_bool(name));}
public String Add_byte(String name) {return Add(Db_meta_fld.new_byte(name));}
public String Add_short(String name) {return Add(Db_meta_fld.new_short(name));}
public String Add_int(String name) {return Add(Db_meta_fld.new_int(name));}
public String Add_int_pkey(String name) {return Add(Db_meta_fld.new_int(name).Primary_y_());}
public String Add_int_pkey_autonum(String name) {return Add(Db_meta_fld.new_int(name).Primary_y_().Autonum_y_());}
public String Add_int_autonum(String name) {return Add(Db_meta_fld.new_int(name).Autonum_y_());}
public String Add_int_dflt(String name, int dflt) {return Add(Db_meta_fld.new_int(name).Default_(dflt));}
public String Add_long(String name) {return Add(Db_meta_fld.new_long(name));}
public String Add_float(String name) {return Add(Db_meta_fld.new_float(name));}
public String Add_double(String name) {return Add(Db_meta_fld.new_double(name));}
public String Add_text(String name) {return Add(Db_meta_fld.new_text(name));}
public String Add_bry(String name) {return Add(Db_meta_fld.new_bry(name));}
public String Add_str(String name, int len) {return Add(Db_meta_fld.new_str(name, len));}
public String Add_str_pkey(String name, int len) {return Add(Db_meta_fld.new_str(name, len).Primary_y_());}
public String Add_str_null(String name, int len) {return Add(Db_meta_fld.new_str(name, len).Nullable_y_());}
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);
Add_itm(fld);
return name;
}
public void Add_itm(Db_meta_fld fld) {
{return Add(Db_meta_fld.new_str(name, len).Default_(dflt));}
public String Add(Db_meta_fld fld) {
String name = fld.Name();
flds.Add(name, fld);
keys.Add(name);
return name;
}
private static final int Len_null = Db_meta_fld.Len_null;
public static Db_meta_fld_list new_() {return new Db_meta_fld_list();}
}

View File

@@ -19,7 +19,7 @@ package gplx.dbs; import gplx.*;
public interface Db_rdr {
boolean Move_next();
byte[] Read_bry(String k);
byte[] Read_bry_in_parts(String tbl, String fld, String crt_key, Object crt_val);
void Save_bry_in_parts(Io_url url, String tbl, String fld, String crt_key, Object crt_val);
byte[] Read_bry_by_str(String k);
String Read_str(String k);
byte Read_byte(String k);

View File

@@ -23,7 +23,7 @@ class Db_rdr__empty implements Db_rdr {
public boolean Move_next() {return false;}
public byte[] Read_bry(String k) {return Bry_.Empty;}
public byte[] Read_bry_by_str(String k) {return Bry_.Empty;}
public byte[] Read_bry_in_parts(String tbl, String fld, String crt_key, Object crt_val) {return Bry_.Empty;}
public void Save_bry_in_parts(Io_url url, String tbl, String fld, String crt_key, Object crt_val) {}
public byte Read_byte(String k) {return Byte_.Max_value_127;}
public String Read_str(String k) {return String_.Empty;}
public DateAdp Read_date_by_str(String k) {return DateAdp_.MinValue;}

View File

@@ -28,7 +28,7 @@ public class Db_rdr__basic implements Db_rdr {
}
@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(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 byte[] Read_bry_in_parts(String tbl, String fld, String crt_key, Object crt_val) {throw Err_.not_implemented_();}
@gplx.Virtual public void Save_bry_in_parts(Io_url url, String tbl, String fld, String crt_key, Object crt_val) {throw Err_.not_implemented_();}
@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(String k) {return DateAdp_.parse_iso8561(Read_str(k));}
@gplx.Virtual public int Read_int(String k) {try {return Int_.cast_(rdr.getObject(k));} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Int_.Cls_val_name, Err_.Message_lang(e));}}

View File

@@ -17,9 +17,9 @@ 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_rdr__mem implements Db_rdr {
private final Mem_itm[] rows; private int row_idx = -1; private final int rows_len;
private Mem_itm row;
public Db_rdr__mem(String[] cols, Mem_itm[] rows) {
private final Mem_row[] rows; private int row_idx = -1; private final int rows_len;
private Mem_row row;
public Db_rdr__mem(String[] cols, Mem_row[] rows) {
this.rows = rows; this.rows_len = rows.length;
}
public boolean Move_next() {
@@ -31,7 +31,7 @@ public class Db_rdr__mem implements Db_rdr {
public byte[] Read_bry(String k) {return (byte[])row.Get_by(k);}
public String Read_str(String k) {return (String)row.Get_by(k);}
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
@gplx.Virtual public byte[] Read_bry_in_parts(String tbl, String fld, String crt_key, Object crt_val) {throw Err_.not_implemented_();}
@gplx.Virtual public void Save_bry_in_parts(Io_url url, String tbl, String fld, String crt_key, Object crt_val) {throw Err_.not_implemented_();}
public DateAdp Read_date_by_str(String k) {return DateAdp_.parse_iso8561((String)row.Get_by(k));}
public byte Read_byte(String k) {return Byte_.cast_(row.Get_by(k));}
public int Read_int(String k) {return Int_.cast_(row.Get_by(k));}

View File

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

View File

@@ -16,11 +16,12 @@ 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.mems; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*;
public class Mem_itm implements GfoInvkAble {
public class Mem_row implements GfoInvkAble {
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 void Set_by(String key, Object val) {hash.Add_if_dupe_use_nth(key, val);}
public void Add(String key, Object val) {hash.Add(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;

View File

@@ -23,7 +23,7 @@ public class Mem_tbl {
public Mem_tbl(Db_meta_tbl meta) {this.meta = meta;}
public Db_meta_tbl Meta() {return meta;} private final Db_meta_tbl meta;
public int Insert(Db_stmt__mem stmt) {
Mem_itm itm = new Mem_itm();
Mem_row itm = new Mem_row();
Db_meta_fld[] flds = meta.Flds();
int len = flds.length;
for (int i = 0; i < len; ++i) {
@@ -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.Get_at(i);
Mem_row itm = (Mem_row)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.Get_at(i);
Mem_row itm = (Mem_row)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.To_ary_and_clear(Mem_itm.class));
return new Db_rdr__mem(select, (Mem_row[])where_rows.To_ary_and_clear(Mem_row.class));
}
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.Get_at(i);
Mem_row itm = (Mem_row)rows.Get_at(i);
if (crt.Matches(itm))
rv.Add(itm);
}

View File

@@ -39,8 +39,8 @@ public class Sql_bry_rdr extends Bry_rdr { public byte[] Read_sql_identifier()
byte[] end_bry = null;
switch (b_0) {
case Byte_ascii.Dash: bgn_1 = Byte_ascii.Dash; end_bry = Comm_end_line; break;
case Byte_ascii.Slash: bgn_1 = Byte_ascii.Asterisk; end_bry = Comm_end_multi; break;
case Byte_ascii.Tab: case Byte_ascii.NewLine: case Byte_ascii.CarriageReturn: case Byte_ascii.Space:
case Byte_ascii.Slash: bgn_1 = Byte_ascii.Star; end_bry = Comm_end_multi; break;
case Byte_ascii.Tab: case Byte_ascii.Nl: case Byte_ascii.Cr: case Byte_ascii.Space:
++pos;
return super.Skip_ws();
default:
@@ -53,5 +53,5 @@ public class Sql_bry_rdr extends Bry_rdr { public byte[] Read_sql_identifier()
pos = end_pos + end_bry.length;
return this.Skip_ws();
}
private static final byte[] Comm_end_line = Byte_ascii.NewLine_bry, Comm_end_multi = Bry_.new_a7("*/");
private static final byte[] Comm_end_line = Byte_ascii.Nl_bry, Comm_end_multi = Bry_.new_a7("*/");
}

View File

@@ -65,14 +65,14 @@ public class Db_sqlbldr__sqlite implements Db_sqlbldr {
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_a7(fld.Nullable() ? "NULL " : "NOT NULL ");
if (fld.Default_value() != Db_meta_fld.Default_value_null) {
if (fld.Default() != Db_meta_fld.Default_value_null) {
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_u8(Object_.Xto_str_strict_or_null(fld.Default_value()));
tmp_bfr.Add_str_u8(Object_.Xto_str_strict_or_null(fld.Default()));
if (quote) tmp_bfr.Add_byte_apos();
tmp_bfr.Add_byte_space();
}