/
in_memory_store.go
62 lines (47 loc) · 1.11 KB
/
in_memory_store.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
package datastore
import (
"database/sql"
"fmt"
)
type inMemoryAppStore struct {
dbConnectionString string
dbFilePath string
inMemoryDb *sql.DB
}
func NewInMemory(dbFileName string) AppStore {
store := &inMemoryAppStore{}
store.dbConnectionString = fmt.Sprintf("file:%s?mode=memory&cache=shared", dbFileName)
return store
}
func (store *inMemoryAppStore) GetDbFilePath() string {
return store.dbFilePath
}
func (store *inMemoryAppStore) Open() (*sql.DB, error) {
if store.inMemoryDb != nil {
return store.inMemoryDb, nil
}
db, err := sql.Open("sqlite3", store.dbConnectionString)
if err != nil {
return nil, err
}
err = db.Ping()
if err != nil {
return nil, err
}
return db, nil
}
func (store *inMemoryAppStore) Close(db *sql.DB) error {
/**
* This is a no-op.
* We don't close the in-memory database because:
* 1. They are only used for automated testing
* 2. Closing sqlite in-memory connection will delete the database
*/
return nil
}
func (store *inMemoryAppStore) TakeBackup() error {
return nil
}
func (store *inMemoryAppStore) RestoreBackup() error {
return nil
}