v/vlib/db/sqlite/parent_child_test.v

87 lines
1.3 KiB
V

// vtest build: present_sqlite3?
import db.sqlite
struct Parent {
id int @[primary; sql: serial]
name string
children []Child @[fkey: 'parent_id']
}
struct Child {
id int @[primary; sql: serial]
name string
parent_id int
babies []Baby @[fkey: 'child_id']
}
struct Baby {
id int @[primary; sql: serial]
name string
child_id int
}
fn test_main() {
mut db := sqlite.connect(':memory:')!
sql db {
create table Parent
create table Child
create table Baby
} or { panic(err) }
new_parent := Parent{
name: 'first parent'
children: [
Child{
name: 'first child'
},
Child{
name: 'second_child'
},
]
}
sql db {
insert new_parent into Parent
} or { panic(err) }
babies := [
Baby{
name: 'first baby'
child_id: 1
},
Baby{
name: 'second baby'
child_id: 1
},
Baby{
name: 'third baby'
child_id: 2
},
Baby{
name: 'fourth baby'
child_id: 2
},
Baby{
name: 'fifth baby'
child_id: 2
},
]
for v in babies {
sql db {
insert v into Baby
} or { panic(err) }
}
parent := sql db {
select from Parent
} or { panic(err) }
assert parent[0].children[0].id == 1
assert parent[0].children[1].id == 2
assert parent[0].children.len == 2
db.close()!
}