/
sql.go
64 lines (55 loc) · 1.13 KB
/
sql.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package repo
import (
"log"
"math/rand"
"github.com/jmoiron/sqlx"
)
func sqlFetchAll(stmt *sqlx.Stmt, N int, onlyQuery bool, limit int, qargs ...interface{}) (ret []*Item) {
defer stmt.Close()
if !onlyQuery {
ret = make([]*Item, 0, limit*N)
}
for i := 0; i < N; i++ {
rows, err := stmt.Queryx(qargs...)
if err != nil {
panic(err)
}
for rows.Next() {
if !onlyQuery {
it := &Item{}
if err = rows.StructScan(it); err != nil {
panic(err)
}
ret = append(ret, it)
}
}
rows.Close()
}
return ret
}
func sqlFetchOne(stmt *sqlx.Stmt, N int, onlyQuery bool, qargs ...interface{}) (it *Item) {
defer stmt.Close()
for i := 0; i < N; i++ {
if onlyQuery {
id := 0
stmt.QueryRow(qargs...).Scan(&id)
} else {
it = &Item{}
if err := stmt.QueryRowx(qargs...).StructScan(it); err != nil {
panic(err)
}
}
}
return it
}
func sqlUpdate(stmt *sqlx.Stmt, N int) {
defer stmt.Close()
for i := 0; i < N; i++ {
id := rand.Int() % itemsInDataSet
item := newItem(id)
_, err := stmt.Exec(item.Name, item.Year, item.Description, id)
if err != nil {
log.Print(err.Error())
}
}
}