v2 / vlib / v / tests / orm_sub_array_struct_test.v
239 lines · 191 sloc · 3.89 KB · c51d30bf5309653c6b573ec815268e69a78ea8cc
Raw
1import db.sqlite
2
3struct Parent {
4 id int @[primary; sql: serial]
5 name string
6 children []Child @[fkey: 'parent_id']
7}
8
9struct Child {
10mut:
11 id int @[primary; sql: serial]
12 parent_id int
13 name string
14}
15
16struct ParentString {
17 name string @[primary]
18 children []ChildString @[fkey: 'parent_name']
19}
20
21struct ChildString {
22mut:
23 id int @[primary; sql: serial]
24 parent_name string
25 name string
26}
27
28fn test_orm_array() {
29 mut db := sqlite.connect(':memory:') or { panic(err) }
30 sql db {
31 create table Parent
32 }!
33 sql db {
34 create table Child
35 }!
36
37 new_parent := Parent{
38 name: 'test'
39 children: [
40 Child{
41 name: 'abc'
42 },
43 Child{
44 name: 'def'
45 },
46 ]
47 }
48
49 sql db {
50 insert new_parent into Parent
51 }!
52
53 parents := sql db {
54 select from Parent where id == 1
55 }!
56
57 sql db {
58 drop table Parent
59 }!
60
61 parent := parents.first()
62 assert parent.name == new_parent.name
63 assert parent.children.len == new_parent.children.len
64 assert parent.children[0].name == 'abc'
65 assert parent.children[1].name == 'def'
66}
67
68fn test_orm_array_different_pkey_type() {
69 mut db := sqlite.connect(':memory:') or { panic(err) }
70 sql db {
71 create table ParentString
72 create table ChildString
73 }!
74
75 new_parent := ParentString{
76 name: 'test'
77 children: [
78 ChildString{
79 name: 'abc'
80 },
81 ChildString{
82 name: 'def'
83 },
84 ]
85 }
86
87 sql db {
88 insert new_parent into ParentString
89 }!
90
91 parents := sql db {
92 select from ParentString where name == 'test'
93 }!
94
95 sql db {
96 drop table ParentString
97 drop table ChildString
98 }!
99
100 parent := parents.first()
101 assert parent.name == new_parent.name
102 assert parent.children.len == new_parent.children.len
103 assert parent.children[0].name == 'abc'
104 assert parent.children[1].name == 'def'
105}
106
107fn test_orm_relationship() {
108 mut db := sqlite.connect(':memory:') or { panic(err) }
109 sql db {
110 create table Parent
111 create table Child
112 }!
113
114 mut child := Child{
115 name: 'abc'
116 }
117
118 new_parent := Parent{
119 name: 'test'
120 children: []
121 }
122 sql db {
123 insert new_parent into Parent
124 }!
125
126 mut parents := sql db {
127 select from Parent where id == 1
128 }!
129
130 mut parent := parents.first()
131 child.parent_id = parent.id
132 child.name = 'atum'
133
134 sql db {
135 insert child into Child
136 }!
137
138 child.name = 'bacon'
139
140 sql db {
141 insert child into Child
142 }!
143
144 assert parent.name == new_parent.name
145 assert parent.children.len == 0
146
147 parents = sql db {
148 select from Parent where id == 1
149 }!
150
151 parent = parents.first()
152 assert parent.name == new_parent.name
153 assert parent.children.len == 2
154 assert parent.children[0].name == 'atum'
155 assert parent.children[1].name == 'bacon'
156
157 mut children := sql db {
158 select from Child
159 }!
160
161 assert children.len == 2
162
163 sql db {
164 drop table Parent
165 }!
166
167 children = sql db {
168 select from Child
169 }!
170
171 assert children.len == 2
172}
173
174fn test_orm_relationship_different_pkey_type() {
175 mut db := sqlite.connect(':memory:') or { panic(err) }
176 sql db {
177 create table ParentString
178 create table ChildString
179 }!
180
181 mut child := ChildString{
182 name: 'abc'
183 }
184
185 new_parent := ParentString{
186 name: 'test'
187 children: []
188 }
189 sql db {
190 insert new_parent into ParentString
191 }!
192
193 mut parents := sql db {
194 select from ParentString where name == 'test'
195 }!
196
197 mut parent := parents.first()
198 child.parent_name = parent.name
199 child.name = 'atum'
200
201 sql db {
202 insert child into ChildString
203 }!
204
205 child.name = 'bacon'
206
207 sql db {
208 insert child into ChildString
209 }!
210
211 assert parent.name == new_parent.name
212 assert parent.children.len == 0
213
214 parents = sql db {
215 select from ParentString where name == 'test'
216 }!
217
218 parent = parents.first()
219 assert parent.name == new_parent.name
220 assert parent.children.len == 2
221 assert parent.children[0].name == 'atum'
222 assert parent.children[1].name == 'bacon'
223
224 mut children := sql db {
225 select from ChildString
226 }!
227
228 assert children.len == 2
229
230 sql db {
231 drop table ParentString
232 }!
233
234 children = sql db {
235 select from ChildString
236 }!
237
238 assert children.len == 2
239}
240