/
sqlitehandler.go
86 lines (71 loc) · 1.91 KB
/
sqlitehandler.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
86
package infrastructure
import (
"database/sql"
"github.com/GerardSoleCa/PubKeyManager/interfaces"
// Blank import for go-sqlcipher
_ "github.com/xeodou/go-sqlcipher"
)
// SqliteHandler struct
type SqliteHandler struct {
Conn *sql.DB
}
// Execute function contained on SqliteHandler
func (handler *SqliteHandler) Execute(statement string, args ...interface{}) (interfaces.Result, error) {
result, err := handler.Conn.Exec(statement, args...)
if err != nil {
return new(SqliteResult), err
}
r := new(SqliteResult)
r.Result = result
return r, nil
}
// Query function contained on SqliteHandler
func (handler *SqliteHandler) Query(statement string, args ...interface{}) (interfaces.Row, error) {
rows, err := handler.Conn.Query(statement, args...)
if err != nil {
return new(SqliteRow), err
}
row := new(SqliteRow)
row.Rows = rows
return row, nil
}
// SqliteResult struct
type SqliteResult struct {
Result sql.Result
}
// LastInsertId function contained on SqliteResult
func (r SqliteResult) LastInsertId() (int64, error) {
return r.Result.LastInsertId()
}
// RowsAffected function contained on SqliteResult
func (r SqliteResult) RowsAffected() (int64, error) {
return r.Result.RowsAffected()
}
// SqliteRow struct
type SqliteRow struct {
Rows *sql.Rows
}
// Scan function contained on SqliteResult
func (r SqliteRow) Scan(dest ...interface{}) {
r.Rows.Scan(dest...)
}
// Next function contained on SqliteRow
func (r SqliteRow) Next() bool {
return r.Rows.Next()
}
// Close function contained on SqliteRow
func (r SqliteRow) Close() {
r.Rows.Close()
}
// NewSqliteHandler creates a new Ciphered SqliteHandler
func NewSqliteHandler(dbfileName string, password string) *SqliteHandler {
conn, _ := sql.Open("sqlite3", dbfileName)
p := "PRAGMA key = '" + password + "';"
_, err := conn.Exec(p)
if err != nil {
panic(err)
}
sqliteHandler := new(SqliteHandler)
sqliteHandler.Conn = conn
return sqliteHandler
}