v2 / vlib / v / fmt / tests / orm_keep.vv
83 lines · 80 sloc · 1.87 KB · eed19e05ac08b534f0cade2f6b55d9f358a0bc64
Raw
1import db.sqlite
2import mymodule { ModDbStruct }
3
4struct Customer {
5 id int
6 name string
7 nr_orders int
8 country string
9}
10
11fn find_all_customers(db sqlite.DB) []Customer {
12 return sql db {
13 select from Customer
14 }
15}
16
17fn main() {
18 db := sqlite.connect('customers.db')?
19 // select count(*) from Customer
20 nr_customers := sql db {
21 select count from Customer
22 }
23 total_orders := sql db {
24 select sum(nr_orders) from Customer
25 }
26 avg_orders := sql db {
27 select avg(nr_orders) from Customer
28 }
29 first_country := sql db {
30 select min(country) from Customer
31 }
32 last_country := sql db {
33 select max(country) from Customer
34 }
35 println('number of all customers: ${nr_customers}')
36 println(total_orders)
37 println(avg_orders)
38 println(first_country)
39 println(last_country)
40 // V syntax can be used to build queries
41 // db.select returns an array
42 uk_customers := sql db {
43 select from Customer where country == 'uk' && nr_orders > 0
44 }
45 println(uk_customers.len)
46 for customer in uk_customers {
47 println('${customer.id} - ${customer.name}')
48 }
49 // by adding `limit 1` we tell V that there will be only one object
50 customer := sql db {
51 select from Customer where id == 1 limit 1
52 }
53 best_customer := sql db {
54 select from Customer order by nr_orders desc limit 1
55 }
56 second_best := sql db {
57 select from UCustomerser order by nr_orders desc limit 1 offset 1
58 }
59 println('${customer.id} - ${customer.name}')
60 // insert a new customer
61 new_customer := Customer{
62 name: 'Bob'
63 nr_orders: 10
64 }
65 sql db {
66 insert new_customer into Customer
67 }
68 // delete a row
69 sql db {
70 delete from Customer where nr_orders == 10 && name == 'Bob'
71 }
72 sql db {
73 update Customer set name = 'Queen Elizabeth II', age = 150, nr_orders = 42, country = 'Great Britain'
74 where id == 5
75 }
76 // DB is a selective import
77 sql db {
78 delete from ModDbStruct where id == 1
79 }
80 _ := sql db {
81 select from ModDbStruct
82 }
83}
84