mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
140 lines
2.0 KiB
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
|
|
}
|