/
db.go
77 lines (61 loc) · 1.33 KB
/
db.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
package internal
import (
"github.com/cSploit/daemon/config"
"github.com/ianschenck/envflag"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/sqlite"
"sync"
)
var (
Db *gorm.DB
models []interface{}
join_tables []string
once sync.Once
)
func OpenDb() error {
return openDb(false)
}
func openDb(drop_tables bool) error {
var dd *gorm.DB
var err error
if dd, err = gorm.Open(config.Conf.Db.Dialect, config.Conf.Db.Args...); err != nil {
return err
}
if drop_tables {
dd.DropTableIfExists(models...)
for _, table_name := range join_tables {
dd.DropTableIfExists(table_name)
}
}
dd = dd.Debug().AutoMigrate(models...)
if dd.Error == nil {
Db = dd
}
return dd.Error
}
func ClearDb() {
for _, model := range models {
Db.Delete(model)
}
for _, table_name := range join_tables {
Db.Exec("DELETE FROM " + table_name)
}
}
func OpenDbForTests() {
once.Do(func() {
envflag.Parse()
if err := config.Load(); err != nil {
panic(err)
}
if err := openDb(true); err != nil {
panic(err)
}
})
}
func RegisterModels(model ...interface{}) {
models = append(models, model...)
}
func RegisterJoinTables(table_name ...string) {
join_tables = append(join_tables, table_name...)
}
//TODO: UpdateCallback { e -> wsConns.each { c -> c.write("entity changed:" + e) } } [Event system]