v2 / vlib / v / tests / orm_bulk_insert_update_test.v
194 lines · 161 sloc · 3.25 KB · d5578efae67ef01ab3a63866d429b7dacf6c237d
Raw
1import db.sqlite
2
3struct OrmBulkUser {
4 id int @[primary]
5 name string
6 age int
7}
8
9struct OrmBulkDefaultRow {
10 id int @[primary; sql: serial]
11}
12
13struct OrmBulkRenamedUser {
14 id int @[primary]
15 display_name string @[sql: 'display_name_text']
16}
17
18fn test_orm_bulk_insert_and_update() {
19 mut db := sqlite.connect(':memory:')!
20 defer {
21 db.close() or { panic(err) }
22 }
23
24 sql db {
25 create table OrmBulkUser
26 }!
27
28 users := [
29 OrmBulkUser{
30 id: 1
31 name: 'Alice'
32 age: 25
33 },
34 OrmBulkUser{
35 id: 2
36 name: 'Bob'
37 age: 30
38 },
39 ]
40
41 sql db {
42 insert users into OrmBulkUser
43 }!
44
45 first := sql db {
46 select from OrmBulkUser where id == 1
47 }!
48 second := sql db {
49 select from OrmBulkUser where id == 2
50 }!
51
52 assert first.len == 1
53 assert first[0].name == 'Alice'
54 assert first[0].age == 25
55 assert second.len == 1
56 assert second[0].name == 'Bob'
57 assert second[0].age == 30
58
59 updates := [
60 OrmBulkUser{
61 id: 1
62 name: 'Alicia'
63 age: 26
64 },
65 OrmBulkUser{
66 id: 2
67 name: 'Robert'
68 age: 31
69 },
70 ]
71
72 sql db {
73 update OrmBulkUser set name = updates.name, age = updates.age where id == updates.id
74 }!
75
76 updated_first := sql db {
77 select from OrmBulkUser where id == 1
78 }!
79 updated_second := sql db {
80 select from OrmBulkUser where id == 2
81 }!
82
83 assert updated_first.len == 1
84 assert updated_first[0].name == 'Alicia'
85 assert updated_first[0].age == 26
86 assert updated_second.len == 1
87 assert updated_second[0].name == 'Robert'
88 assert updated_second[0].age == 31
89}
90
91fn test_orm_bulk_insert_preserves_all_default_rows() {
92 mut db := sqlite.connect(':memory:')!
93 defer {
94 db.close() or { panic(err) }
95 }
96
97 sql db {
98 create table OrmBulkDefaultRow
99 }!
100
101 rows := [OrmBulkDefaultRow{}, OrmBulkDefaultRow{}, OrmBulkDefaultRow{}]
102
103 sql db {
104 insert rows into OrmBulkDefaultRow
105 }!
106
107 inserted := sql db {
108 select from OrmBulkDefaultRow order by id
109 }!
110
111 assert inserted.len == 3
112 assert inserted[0].id == 1
113 assert inserted[1].id == 2
114 assert inserted[2].id == 3
115}
116
117fn test_orm_bulk_insert_with_mixed_serial_values_keeps_defaults() {
118 mut db := sqlite.connect(':memory:')!
119 defer {
120 db.close() or { panic(err) }
121 }
122
123 sql db {
124 create table OrmBulkDefaultRow
125 }!
126
127 rows := [
128 OrmBulkDefaultRow{},
129 OrmBulkDefaultRow{
130 id: 5
131 },
132 ]
133
134 sql db {
135 insert rows into OrmBulkDefaultRow
136 }!
137
138 inserted := sql db {
139 select from OrmBulkDefaultRow order by id
140 }!
141
142 assert inserted.len == 2
143 assert inserted[0].id == 1
144 assert inserted[1].id == 5
145}
146
147fn test_orm_bulk_update_with_renamed_column() {
148 mut db := sqlite.connect(':memory:')!
149 defer {
150 db.close() or { panic(err) }
151 }
152
153 sql db {
154 create table OrmBulkRenamedUser
155 }!
156
157 users := [
158 OrmBulkRenamedUser{
159 id: 1
160 display_name: 'Alice'
161 },
162 OrmBulkRenamedUser{
163 id: 2
164 display_name: 'Bob'
165 },
166 ]
167
168 sql db {
169 insert users into OrmBulkRenamedUser
170 }!
171
172 updates := [
173 OrmBulkRenamedUser{
174 id: 1
175 display_name: 'Alicia'
176 },
177 OrmBulkRenamedUser{
178 id: 2
179 display_name: 'Robert'
180 },
181 ]
182
183 sql db {
184 update OrmBulkRenamedUser set display_name = updates.display_name where id == updates.id
185 }!
186
187 updated := sql db {
188 select from OrmBulkRenamedUser order by id
189 }!
190
191 assert updated.len == 2
192 assert updated[0].display_name == 'Alicia'
193 assert updated[1].display_name == 'Robert'
194}
195