1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

cgen, checker: add panic in ORM for invalid queries, when there are no or {} blocks, add type checking for the fkey attribute, add tests (#16977)

This commit is contained in:
walking devel
2023-01-17 18:21:10 +00:00
committed by GitHub
parent 93ee6d107a
commit 2fb9bdce9a
14 changed files with 370 additions and 61 deletions

View File

@@ -1,5 +1,3 @@
// import os
// import term
// import db.mysql
// import db.pg
import time
@@ -34,21 +32,13 @@ struct TestTime {
fn test_orm() {
db := sqlite.connect(':memory:') or { panic(err) }
db.exec('drop table if exists User')
// db := pg.connect(host: 'localhost', port: 5432, user: 'louis', password: 'abc', dbname: 'orm') or { panic(err) }
/*
mut db := mysql.Connection{
host: '127.0.0.1'
username: 'root'
password: 'pw'
dbname: 'v'
}
db.connect() or { panic(err) }*/
sql db {
create table Module
}
sql db {
create table User
}
name := 'Peter'
@@ -84,38 +74,41 @@ fn test_orm() {
}
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
}
@@ -123,7 +116,7 @@ fn test_orm() {
assert user.name == 'Sam'
assert user.id == 1
assert user.age == 29
//
users := sql db {
select from User where id > 0
}
@@ -132,13 +125,13 @@ fn test_orm() {
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
}
@@ -146,13 +139,13 @@ fn test_orm() {
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
@@ -161,7 +154,6 @@ fn test_orm() {
insert new_user into User
}
// db.insert<User>(user2)
x := sql db {
select from User where id == 4
}
@@ -169,18 +161,18 @@ fn test_orm() {
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'
}
@@ -190,7 +182,7 @@ fn test_orm() {
}
assert kate2.age == 31
assert kate2.name == 'Kate'
//
sql db {
update User set age = 32, name = 'Kate N' where name == 'Kate'
}
@@ -200,18 +192,7 @@ fn test_orm() {
}
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
@@ -222,7 +203,7 @@ fn test_orm() {
}
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
@@ -233,25 +214,25 @@ fn test_orm() {
}
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 order by id limit 2 offset offset_const