diff options
Diffstat (limited to 'v_windows/v/vlib/orm/orm_test.v')
-rw-r--r-- | v_windows/v/vlib/orm/orm_test.v | 316 |
1 files changed, 316 insertions, 0 deletions
diff --git a/v_windows/v/vlib/orm/orm_test.v b/v_windows/v/vlib/orm/orm_test.v new file mode 100644 index 0000000..c5e4fe1 --- /dev/null +++ b/v_windows/v/vlib/orm/orm_test.v @@ -0,0 +1,316 @@ +// import os +// import pg +// import term +import time +import sqlite + +struct Module { + id int [primary; sql: serial] + name string + nr_downloads int + user User +} + +[table: 'userlist'] +struct User { + id int [primary; sql: serial] + age int + name string [sql: 'username'] + is_customer bool + skipped_string string [skip] +} + +struct Foo { + age int +} + +struct TestTime { + id int [primary; sql: serial] + create time.Time +} + +fn test_orm_sqlite() { + db := sqlite.connect(':memory:') or { panic(err) } + db.exec('drop table if exists User') + sql db { + create table User + } + + name := 'Peter' + + sam := User{ + age: 29 + name: 'Sam' + } + + peter := User{ + age: 31 + name: 'Peter' + } + + k := User{ + age: 30 + name: 'Kate' + is_customer: true + } + + sql db { + insert sam into User + insert peter into User + insert k into User + } + + c := sql db { + select count from User where id != 1 + } + assert c == 2 + + nr_all_users := sql db { + select count from User + } + assert nr_all_users == 3 + println('nr_all_users=$nr_all_users') + // + nr_users1 := sql db { + select count from User where id == 1 + } + assert nr_users1 == 1 + println('nr_users1=$nr_users1') + // + nr_peters := sql db { + select count from User where id == 2 && name == 'Peter' + } + assert nr_peters == 1 + println('nr_peters=$nr_peters') + // + nr_peters2 := sql db { + select count from User where id == 2 && name == name + } + assert nr_peters2 == 1 + nr_peters3 := sql db { + select count from User where name == name + } + assert nr_peters3 == 1 + peters := sql db { + select from User where name == name + } + assert peters.len == 1 + assert peters[0].name == 'Peter' + one_peter := sql db { + select from User where name == name limit 1 + } + assert one_peter.name == 'Peter' + assert one_peter.id == 2 + // + user := sql db { + select from User where id == 1 + } + println(user) + assert user.name == 'Sam' + assert user.id == 1 + assert user.age == 29 + // + users := sql db { + select from User where id > 0 + } + println(users) + assert users.len == 3 + assert users[0].name == 'Sam' + assert users[1].name == 'Peter' + assert users[1].age == 31 + // + users2 := sql db { + select from User where id < 0 + } + println(users2) + assert users2.len == 0 + // + users3 := sql db { + select from User where age == 29 || age == 31 + } + println(users3) + assert users3.len == 2 + assert users3[0].age == 29 + assert users3[1].age == 31 + // + missing_user := sql db { + select from User where id == 8777 + } + println('missing_user:') + println(missing_user) // zero struct + // + new_user := User{ + name: 'New user' + age: 30 + } + sql db { + insert new_user into User + } + + // db.insert<User>(user2) + x := sql db { + select from User where id == 4 + } + println(x) + assert x.age == 30 + assert x.id == 4 + assert x.name == 'New user' + // + kate := sql db { + select from User where id == 3 + } + assert kate.is_customer == true + // + customer := sql db { + select from User where is_customer == true limit 1 + } + assert customer.is_customer == true + assert customer.name == 'Kate' + // + sql db { + update User set age = 31 where name == 'Kate' + } + + kate2 := sql db { + select from User where id == 3 + } + assert kate2.age == 31 + assert kate2.name == 'Kate' + // + sql db { + update User set age = 32, name = 'Kate N' where name == 'Kate' + } + + mut kate3 := sql db { + select from User where id == 3 + } + assert kate3.age == 32 + assert kate3.name == 'Kate N' + // + /* + sql db { + update User set age = age + 1, name = 'Kate N' where name == 'Kate' + } + kate3 = sql db { + select from User where id == 3 + } + println(kate3) + assert kate3.age == 32 + assert kate3.name == 'Kate N' + */ + new_age := 33 + sql db { + update User set age = new_age, name = 'Kate N' where id == 3 + } + + kate3 = sql db { + select from User where id == 3 + } + assert kate3.age == 33 + assert kate3.name == 'Kate N' + // + foo := Foo{34} + sql db { + update User set age = foo.age, name = 'Kate N' where id == 3 + } + + kate3 = sql db { + select from User where id == 3 + } + assert kate3.age == 34 + assert kate3.name == 'Kate N' + // + no_user := sql db { + select from User where id == 30 + } + assert no_user.name == '' // TODO optional + assert no_user.age == 0 + // + two_users := sql db { + select from User limit 2 + } + assert two_users.len == 2 + assert two_users[0].id == 1 + // + y := sql db { + select from User limit 2 offset 1 + } + assert y.len == 2 + assert y[0].id == 2 + // + offset_const := 2 + z := sql db { + select from User limit 2 offset offset_const + } + assert z.len == 2 + assert z[0].id == 3 + oldest := sql db { + select from User order by age desc limit 1 + } + assert oldest.age == 34 + offs := 1 + second_oldest := sql db { + select from User order by age desc limit 1 offset offs + } + assert second_oldest.age == 31 + sql db { + delete from User where age == 34 + } + + updated_oldest := sql db { + select from User order by age desc limit 1 + } + assert updated_oldest.age == 31 + + db.exec('insert into User (name, age) values (NULL, 31)') + null_user := sql db { + select from User where id == 5 + } + assert null_user.name == '' + + age_test := sql db { + select from User where id == 1 + } + + assert age_test.age == 29 + + sql db { + update User set age = age + 1 where id == 1 + } + + mut first := sql db { + select from User where id == 1 + } + + assert first.age == 30 + + sql db { + update User set age = age * 2 where id == 1 + } + + first = sql db { + select from User where id == 1 + } + + assert first.age == 60 + + sql db { + create table TestTime + } + + tnow := time.now() + + time_test := TestTime{ + create: tnow + } + + sql db { + insert time_test into TestTime + } + + data := sql db { + select from TestTime where create == tnow + } + + assert data.len == 1 +} |