1 module shark.test; 2 3 unittest { 4 5 import std.exception : assertThrown; 6 7 import shark.clause; 8 import shark.database; 9 import shark.entity; 10 import shark.sql; 11 12 import shark.impl.mysql; 13 import shark.impl.postgresql; 14 15 static class Test : Entity { 16 17 override string tableName() { 18 return "test"; 19 } 20 21 } 22 23 static class Test0 : Test { 24 25 @PrimaryKey 26 @AutoIncrement 27 Integer testId; 28 29 @Name("string") 30 @Length(10) 31 String test; 32 33 } 34 35 static class Test1 : Test0 { 36 37 @NotNull 38 Integer a; 39 40 @Unique 41 Short b; 42 43 } 44 45 // table with all the types 46 static class Test2 : Test { 47 48 Bool a; 49 50 //Byte b; 51 52 Short c; 53 54 Integer d; 55 56 Long e; 57 58 Float f; 59 60 Double g; 61 62 Char h; 63 64 @Length(80) 65 String i; 66 67 @Length(80) 68 Binary l; 69 70 Clob m; 71 72 Blob n; 73 74 Date o; 75 76 DateTime p; 77 78 Time q; 79 80 } 81 82 // table with composite primary key 83 static class Test3 : Test { 84 85 @PrimaryKey 86 Integer id1; 87 88 @PrimaryKey 89 String id2; 90 91 uint value; 92 93 } 94 95 static class Test4 : Test { 96 97 string str; 98 99 } 100 101 Database[] databases; 102 103 Database mysql = new MysqlDatabase("localhost"); 104 mysql.connect("test", "root", "root"); 105 //databases ~= mysql; 106 107 Database maria = new MysqlDatabase("localhost", 3307); 108 maria.connect("test", "root", "root"); 109 //databases ~= maria; 110 111 Database postgres = new PostgresqlDatabase("localhost"); 112 postgres.connect("test", "postgres", "root"); 113 databases ~= postgres; 114 115 foreach(database ; databases) { 116 117 database.dropIfExists("test"); 118 119 database.init!Test0(); // create 120 database.init!Test1(); // alter 121 122 assert(database.select!Test1().length == 0); 123 124 Test1 test1 = new Test1(); 125 test1.test = "test"; 126 test1.a = 55; 127 test1.b = -1; 128 database.insert(test1); 129 assert(test1.testId == 1); 130 131 test1.testId = null; 132 assertThrown!DatabaseException(database.insert(test1)); // `b` is unique 133 134 test1.a = null; 135 assertThrown!DatabaseException(database.insert(test1)); // `a` cannot be null 136 137 test1.a = 44; 138 test1.b = 1; 139 database.insert(test1, false); 140 141 test1.a = 33; 142 test1.b = 6; 143 database.insert(test1); 144 145 assert(database.select!Test1().length == 3); 146 147 test1 = new Test1(); 148 test1.test = "test"; 149 test1 = database.selectOne!(["string"], Test1)(Database.Select(Clause.Where(var("string").equals("test")))); 150 assert(test1.test == "test"); 151 152 Test1[] test1s = database.select!Test1(Database.Select(Clause.Order("a"))); 153 assert(test1s[0].a == 33); 154 assert(test1s[1].a == 44); 155 assert(test1s[2].a == 55); 156 157 test1s = database.select!Test1(Database.Select(Clause.Where(var("a").lessThan(40) & var("b").notEquals(0)))); 158 assert(test1s.length == 1); 159 assert(test1s[0].a == 33); 160 161 database.drop("test"); 162 database.init!Test2(); 163 164 Test2 test2 = new Test2(); 165 test2.a = true; 166 //test2.b = 12; 167 test2.c = 13; 168 test2.d = -14; 169 test2.e = null; 170 test2.f = .55f; 171 test2.g = 7.34823e+10; 172 test2.h = ';'; 173 test2.i = "test"; 174 test2.l = [0, 1, 2, 55]; 175 test2.m = "___________________"; 176 test2.n = [0, 0, 0, 0, 0, 0, 0]; 177 test2.o = Date(2018, 12, 31); 178 test2.p = DateTime(2019, 1, 1, 0, 27, 43); 179 test2.q = Time(0, 36, 12); 180 database.insert(test2); 181 182 Test2[] test2s = database.select!Test2(); 183 assert(test2s.length == 1); 184 test2 = test2s[0]; 185 assert(test2.a == true); 186 //assert(test2.b == 12); 187 assert(test2.c == 13); 188 assert(test2.d == -14); 189 assert(test2.e.isNull); 190 assert(test2.f == .55f); 191 assert(test2.g == 7.34823e+10); 192 assert(test2.h == ';'); 193 assert(test2.i == "test"); 194 assert(test2.l == [0, 1, 2, 55]); 195 assert(test2.m == "___________________"); 196 assert(test2.n == [0, 0, 0, 0, 0, 0, 0]); 197 assert(test2.o == Date(2018, 12, 31)); 198 assert(test2.p == DateTime(2019, 1, 1, 0, 27, 43)); 199 assert(test2.q == Time(0, 36, 12)); 200 201 database.drop("test"); 202 database.init!Test3(); 203 204 Test3 test3 = new Test3(); 205 test3.id1 = 1; 206 test3.id2 = "test"; 207 test3.value = int.max; 208 database.insert(test3); 209 210 test3.value = 12; 211 database.update!"value"(test3); 212 213 test3 = database.selectId!Test3(test3); 214 assert(test3.id1 == 1); 215 assert(test3.id2 == "test"); 216 assert(test3.value == 12); 217 218 database.del(test3); 219 assert(database.select!Test3().length == 0); 220 221 database.drop("test"); 222 database.init!Test4(); 223 224 Test4 test4 = new Test4(); 225 test4.str = "'"; 226 database.insert(test4); 227 test4.str = "');drop table test;--"; 228 database.insert(test4); 229 230 database.close(); 231 232 } 233 234 }