-
Notifications
You must be signed in to change notification settings - Fork 6
/
StorageManager.go
85 lines (69 loc) · 1.91 KB
/
StorageManager.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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package storage
import (
"context"
"database/sql"
_ "github.com/mattn/go-sqlite3"
cmn "github.com/vit1251/golden/internal/common"
"github.com/vit1251/golden/pkg/registry"
"log"
"time"
)
type StorageManager struct {
conn *sql.DB
}
func (self *StorageManager) GetConnection() *sql.DB {
return self.conn
}
// / Initialize storage
func NewStorageManager(r *registry.Container) *StorageManager {
sm := new(StorageManager)
sm.Open()
return sm
}
func (self *StorageManager) Open() error {
storageFile := cmn.GetModernStorageFile()
log.Printf("StorageManager: Open storage: path = %s", storageFile)
db, err2 := sql.Open("sqlite3", storageFile)
if err2 != nil {
panic(err2)
}
self.conn = db
return nil
}
func (self *StorageManager) Close() error {
return self.conn.Close()
}
func (self *StorageManager) Query(query string, params []interface{}, f func(rows *sql.Rows) error) error {
var errRes error = nil
parentContext := context.Background()
ctx, cancel := context.WithTimeout(parentContext, 5*time.Second)
defer cancel()
log.Printf("StorageManager: Query: sql = %+v params = %+v", query, params)
start := time.Now()
if rows, err1 := self.conn.QueryContext(ctx, query, params...); err1 == nil {
for rows.Next() {
err2 := f(rows)
if err2 != nil {
errRes = err2
break
}
}
err3 := rows.Close()
if err3 != nil {
errRes = err3
}
} else {
errRes = err1
}
duration := time.Since(start)
log.Printf("StorageManager: Query: duration = %+v err = %+v", duration, errRes)
return errRes
}
func (self *StorageManager) Exec(query string, params []interface{}, f func(result sql.Result, err error) error) error {
log.Printf("StorageManager: Exec: sql = %+v params = %+v", query, params)
start := time.Now()
result, err1 := self.conn.Exec(query, params...)
duration := time.Since(start)
log.Printf("StorageManager: Exec: duration = %+v err = %+v", duration, err1)
return f(result, err1)
}