v2 / vlib / db / sqlite / sqlite_comptime_field_test.v
45 lines · 39 sloc · 768 bytes · a80bc2331450fc28c900097f8afafe173f161d27
Raw
1// vtest build: present_sqlite3?
2module main
3
4import db.sqlite
5
6@[table: 'blog']
7pub struct Blog {
8 id int @[primary; sql: serial]
9 slug string
10 language string
11}
12
13fn records_by_field[T](db sqlite.DB, fieldname string, value string) ![]T {
14 $for field in T.fields {
15 if field.name == fieldname {
16 entries := sql db {
17 select from Blog where field.name == value
18 } or { return err }
19 return entries
20 }
21 }
22 return error('fieldname not found')
23}
24
25fn test_main() {
26 mut db := sqlite.connect(':memory:')!
27 sql db {
28 create table Blog
29 }!
30
31 row := Blog{
32 slug: 'Test'
33 language: 'v'
34 }
35
36 sql db {
37 insert row into Blog
38 }!
39 rows := records_by_field[Blog](db, 'language', 'v') or {
40 println(err)
41 return
42 }
43 assert rows.len == 1
44 db.close()!
45}
46