Repository navigation
Expand file tree
/
Copy pathsqlite.go
More file actions
88 lines (74 loc) · 2.09 KB
/
Copy pathsqlite.go
File metadata and controls
88 lines (74 loc) · 2.09 KB
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
87
88
package main
// See:
// * http://www.sqlitetutorial.net/sqlite-date/
// * Embedding a pointer in a struct: https://stackoverflow.com/a/44412899
import (
"database/sql"
"time"
_ "github.com/mattn/go-sqlite3"
)
type connection struct {
*sql.DB
}
type record struct {
id int
date string
startTime string
endTime string
pause string
}
func connect(dbName string) *connection {
conn, err := sql.Open("sqlite3", dbName)
checkErr(err)
return &connection{conn}
}
func (c connection) executeStmt(statement string) sql.Result {
stmt, err := c.Prepare(statement)
checkErr(err)
res, err := stmt.Exec()
return res
}
func (c connection) createTable() sql.Result {
stmt := "CREATE TABLE IF NOT EXISTS tracker (id INTEGER PRIMARY KEY, date TEXT, start_time TEXT, end_time TEXT, pause TEXT)"
return c.executeStmt(stmt)
}
func (c connection) insertNewRecord() sql.Result {
stmt := "INSERT INTO tracker (date, start_time, end_time, pause) VALUES (DATE('now', 'localtime'), TIME('now', 'localtime'), TIME('now', 'localtime'), '60m')"
return c.executeStmt(stmt)
}
func (c connection) updateRecord(r *record) sql.Result {
stmt, err := c.Prepare("UPDATE tracker SET end_time = TIME('now', 'localtime') WHERE id = ?")
checkErr(err)
res, err := stmt.Exec(r.id)
checkErr(err)
return res
}
func (c *connection) getLastRecord() *record {
row, err := c.Query("SELECT * FROM tracker ORDER BY id DESC LIMIT 1")
checkErr(err)
r := new(record)
for row.Next() {
err := row.Scan(&r.id, &r.date, &r.startTime, &r.endTime, &r.pause)
checkErr(err)
}
return r
}
func (c connection) getRecordByDay(day string) *record {
row, err := c.Query("SELECT * FROM tracker WHERE date = ? LIMIT 1", day)
checkErr(err)
r := new(record)
for row.Next() {
err := row.Scan(&r.id, &r.date, &r.startTime, &r.endTime, &r.pause)
checkErr(err)
}
return r
}
func (c connection) setPause(day string, pause string) sql.Result {
_, err := time.ParseDuration(pause)
checkErr(err)
stmt, err := c.Prepare("UPDATE tracker SET pause = ? WHERE date = ?")
checkErr(err)
res, err := stmt.Exec(pause, day)
checkErr(err)
return res
}