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

140 lines
2.0 KiB
V

import db.sqlite
struct Parent {
id int [primary; sql: serial]
children []Child [fkey: 'parent_id']
notes []Note [fkey: 'owner_id']
}
struct Child {
mut:
id int [primary; sql: serial]
parent_id int
}
struct Note {
mut:
id int [primary; sql: serial]
owner_id int
}
struct Entity {
name string [primary]
description string
}
fn test_create_without_id_field() {
db := sqlite.connect(':memory:')!
sql db {
create table Entity
}!
first := Entity{
name: 'First'
description: 'Such wow! No `id` field'
}
second := Entity{
name: 'Second'
description: 'Such wow! No `id` field again'
}
sql db {
insert first into Entity
insert second into Entity
}!
entities := sql db {
select from Entity
}!
assert entities.len == 2
first_entity := sql db {
select from Entity where name == 'First'
}!
assert first_entity.first().name == 'First'
second_entity := sql db {
select from Entity where name == 'Second'
}!
assert second_entity.first().name == 'Second'
}
fn test_create_only_one_table() {
mut db := sqlite.connect(':memory:')!
sql db {
create table Parent
}!
mut is_child_created := true
mut is_note_created := true
_ := sql db {
select count from Child
} or {
is_child_created = false
0
}
_ := sql db {
select count from Note
} or {
is_note_created = false
0
}
assert is_child_created == false
assert is_note_created == false
}
fn test_drop_only_one_table() {
mut db := sqlite.connect(':memory:')!
sql db {
create table Parent
}!
sql db {
create table Child
}!
sql db {
create table Note
}!
mut is_parent_dropped := false
mut is_child_dropped := false
mut is_note_dropped := false
sql db {
drop table Parent
}!
_ := sql db {
select count from Parent
} or {
is_parent_dropped = true
0
}
_ := sql db {
select count from Child
} or {
is_child_dropped = true
0
}
_ := sql db {
select count from Note
} or {
is_note_dropped = true
0
}
assert is_parent_dropped
assert is_child_dropped == false
assert is_note_dropped == false
}