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
2016-01-17 23:18:07 -05:00
parent 096045614c
commit 235228976e
314 changed files with 4458 additions and 2694 deletions

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.sqls; import gplx.*; import gplx.dbs.*;
import gplx.dbs.metas.*;
interface Db_sqlbldr {}
public class Db_sqlbldr__sqlite implements Db_sqlbldr {
private Bry_bfr tmp_bfr = Bry_bfr.reset_(1024);
public Db_sqlbldr__sqlite Bfr_(Bry_bfr bfr) {this.tmp_bfr = bfr; return this;}
public String Bld_create_idx(Db_meta_idx idx) {
public String Bld_create_idx(Dbmeta_idx_itm idx) {
tmp_bfr.Add_str_a7("CREATE ");
if (idx.Unique())
tmp_bfr.Add_str_a7("UNIQUE ");
@@ -30,22 +31,22 @@ public class Db_sqlbldr__sqlite implements Db_sqlbldr {
tmp_bfr.Add_str_a7(" ON ");
tmp_bfr.Add_str_a7(idx.Tbl());
tmp_bfr.Add_str_a7(" (");
String[] flds = idx.Flds();
Dbmeta_idx_fld[] flds = idx.Flds;
int flds_len = flds.length;
for (int i = 0; i < flds_len; ++i) {
String fld = flds[i];
Dbmeta_idx_fld fld = flds[i];
if (i != 0) tmp_bfr.Add_str_a7(", ");
tmp_bfr.Add_str_a7(fld);
tmp_bfr.Add_str_a7(fld.Name);
}
tmp_bfr.Add_str_a7(");");
return tmp_bfr.To_str_and_clear();
}
public String Bld_create_tbl(Db_meta_tbl tbl) {
public String Bld_create_tbl(Dbmeta_tbl_itm tbl) {
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) {
Db_meta_fld fld = flds[i];
Dbmeta_fld_mgr flds = tbl.Flds();
int len = flds.Len();
for (int i = 0; i < len; ++i) {
Dbmeta_fld_itm fld = flds.Get_at(i);
tmp_bfr.Add_byte(i == 0 ? Byte_ascii.Paren_bgn : Byte_ascii.Comma).Add_byte_space();
Bld_fld(tmp_bfr, fld);
tmp_bfr.Add_byte_nl();
@@ -53,7 +54,7 @@ public class Db_sqlbldr__sqlite implements Db_sqlbldr {
tmp_bfr.Add_str_a7(");");
return tmp_bfr.To_str_and_clear();
}
public String Bld_alter_tbl_add(String tbl, Db_meta_fld fld) {
public String Bld_alter_tbl_add(String tbl, Dbmeta_fld_itm fld) {
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();
@@ -62,15 +63,19 @@ public class Db_sqlbldr__sqlite implements Db_sqlbldr {
public String Bld_drop_tbl(String tbl) {
return String_.Format("DROP TABLE IF EXISTS {0};", tbl);
}
private void Bld_fld(Bry_bfr tmp_bfr, Db_meta_fld fld) {
private void Bld_fld(Bry_bfr tmp_bfr, Dbmeta_fld_itm fld) {
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() != Db_meta_fld.Default_value_null) {
Tid_to_sql(tmp_bfr, fld.Type().Tid_ansi(), fld.Type().Len_1()); tmp_bfr.Add_byte_space();
switch (fld.Nullable_tid()) {
case Dbmeta_fld_itm.Nullable_unknown:
case Dbmeta_fld_itm.Nullable_not_null: tmp_bfr.Add_str_a7("NOT NULL "); break;
case Dbmeta_fld_itm.Nullable_null: tmp_bfr.Add_str_a7("NULL "); break;
}
if (fld.Default() != Dbmeta_fld_itm.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;
switch (fld.Type().Tid_ansi()) {
case Dbmeta_fld_tid.Tid__str: case Dbmeta_fld_tid.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()));
@@ -83,17 +88,17 @@ public class Db_sqlbldr__sqlite implements Db_sqlbldr {
}
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_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_.new_unhandled(tid);
case Dbmeta_fld_tid.Tid__bool: tmp_bfr.Add_str_a7("boolean"); break;
case Dbmeta_fld_tid.Tid__byte: tmp_bfr.Add_str_a7("tinyint"); break;
case Dbmeta_fld_tid.Tid__short: tmp_bfr.Add_str_a7("smallint"); break;
case Dbmeta_fld_tid.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 Dbmeta_fld_tid.Tid__long: tmp_bfr.Add_str_a7("bigint"); break;
case Dbmeta_fld_tid.Tid__float: tmp_bfr.Add_str_a7("float"); break;
case Dbmeta_fld_tid.Tid__double: tmp_bfr.Add_str_a7("double"); break;
case Dbmeta_fld_tid.Tid__str: tmp_bfr.Add_str_a7("varchar(").Add_int_variable(len).Add_byte(Byte_ascii.Paren_end); break;
case Dbmeta_fld_tid.Tid__text: tmp_bfr.Add_str_a7("text"); break;
case Dbmeta_fld_tid.Tid__bry: tmp_bfr.Add_str_a7("blob"); break;
default: throw Err_.new_unhandled(tid);
}
}
public static final Db_sqlbldr__sqlite Instance = new Db_sqlbldr__sqlite();

View File

@@ -20,12 +20,12 @@ import org.junit.*;
public class Db_sqlbldr_tst {
@Before public void setup() {} private final Db_sqlbldr_fxt fxt = new Db_sqlbldr_fxt();
@Test public void Idx_unique() {
fxt.Test_create_idx(Db_meta_idx.new_unique_by_tbl("tbl_name", "idx_name", "fld_1", "fld_2")
fxt.Test_create_idx(Dbmeta_idx_itm.new_unique_by_tbl("tbl_name", "idx_name", "fld_1", "fld_2")
, "CREATE UNIQUE INDEX IF NOT EXISTS tbl_name__idx_name ON tbl_name (fld_1, fld_2);"
);
}
@Test public void Tbl_basic() {
Db_meta_fld_list flds = Db_meta_fld_list.new_();
Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
flds.Add_int_pkey("fld_int_pkey");
flds.Add_bool("fld_bool");
flds.Add_short("fld_short");
@@ -36,7 +36,7 @@ public class Db_sqlbldr_tst {
flds.Add_str("fld_str", 123);
flds.Add_text("fld_text");
flds.Add_bry("fld_bry");
fxt.Test_create_tbl(Db_meta_tbl.new_("tbl_name", flds.To_fld_ary())
fxt.Test_create_tbl(Dbmeta_tbl_itm.New("tbl_name", flds.To_fld_ary())
, String_.Concat_lines_nl_skip_last
( "CREATE TABLE IF NOT EXISTS tbl_name"
, "( fld_int_pkey integer NOT NULL PRIMARY KEY"
@@ -53,7 +53,7 @@ public class Db_sqlbldr_tst {
));
}
@Test public void Tbl_alter_tbl_add() {
Db_meta_fld_list flds = Db_meta_fld_list.new_();
Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
flds.Add_int_dflt("fld_int", -1);
flds.Add_str_dflt("fld_str", 255, "a");
fxt.Test_alter_tbl_add("tbl_name", flds.Get_by("fld_int"), "ALTER TABLE tbl_name ADD fld_int integer NOT NULL DEFAULT -1;");
@@ -62,7 +62,7 @@ public class Db_sqlbldr_tst {
}
class Db_sqlbldr_fxt {
private Db_sqlbldr__sqlite sqlbldr = Db_sqlbldr__sqlite.Instance;
public void Test_create_idx(Db_meta_idx idx, String expd) {Tfds.Eq(expd, sqlbldr.Bld_create_idx(idx));}
public void Test_create_tbl(Db_meta_tbl tbl, String expd) {Tfds.Eq_str_lines(expd, sqlbldr.Bld_create_tbl(tbl));}
public void Test_alter_tbl_add(String tbl, Db_meta_fld fld, String expd) {Tfds.Eq_str_lines(expd, sqlbldr.Bld_alter_tbl_add(tbl, fld));}
public void Test_create_idx(Dbmeta_idx_itm idx, String expd) {Tfds.Eq(expd, sqlbldr.Bld_create_idx(idx));}
public void Test_create_tbl(Dbmeta_tbl_itm tbl, String expd) {Tfds.Eq_str_lines(expd, sqlbldr.Bld_create_tbl(tbl));}
public void Test_alter_tbl_add(String tbl, Dbmeta_fld_itm fld, String expd) {Tfds.Eq_str_lines(expd, sqlbldr.Bld_alter_tbl_add(tbl, fld));}
}