v2 / vlib / v / tests / orm_sub_struct_test.v
91 lines · 77 sloc · 1.63 KB · cd64ae9ca0a169550249546ec60cabb5a8851406
Raw
1// vtest build: present_sqlite3?
2import db.sqlite
3
4struct Upper {
5 id int @[primary; sql: serial]
6 sub SubStruct
7}
8
9struct SubStruct {
10 id int @[primary; sql: serial]
11 name string
12}
13
14struct OrmDuplicateHuman {
15 id int @[primary; sql: serial]
16 name string
17}
18
19struct OrmDuplicateRelation {
20 id int @[primary; sql: serial]
21 kind string
22 human1 OrmDuplicateHuman @[fkey: 'id']
23 human2 OrmDuplicateHuman @[fkey: 'id']
24}
25
26fn test_orm_sub_structs() {
27 mut db := sqlite.connect(':memory:') or { panic(err) }
28 sql db {
29 create table Upper
30 }!
31 sql db {
32 create table SubStruct
33 }!
34
35 upper_1 := Upper{
36 sub: SubStruct{
37 name: 'test123'
38 }
39 }
40
41 sql db {
42 insert upper_1 into Upper
43 }!
44
45 uppers := sql db {
46 select from Upper where id == 1
47 }!
48
49 assert uppers.first().sub.name == upper_1.sub.name
50 db.close()!
51}
52
53fn test_orm_sub_structs_with_duplicate_foreign_type_fields() {
54 mut db := sqlite.connect(':memory:') or { panic(err) }
55 sql db {
56 create table OrmDuplicateHuman
57 }!
58 sql db {
59 create table OrmDuplicateRelation
60 }!
61
62 relation := OrmDuplicateRelation{
63 kind: 'couple'
64 human1: OrmDuplicateHuman{
65 name: 'adam'
66 }
67 human2: OrmDuplicateHuman{
68 name: 'ewa'
69 }
70 }
71
72 sql db {
73 insert relation into OrmDuplicateRelation
74 }!
75
76 humans := sql db {
77 select from OrmDuplicateHuman order by id
78 }!
79 assert humans.len == 2
80 assert humans[0].name == 'adam'
81 assert humans[1].name == 'ewa'
82
83 relations := sql db {
84 select from OrmDuplicateRelation where id == 1
85 }!
86 assert relations.len == 1
87 assert relations[0].human1.name == 'adam'
88 assert relations[0].human2.name == 'ewa'
89 assert relations[0].human1.id != relations[0].human2.id
90 db.close()!
91}
92