forked from andeya/faygo
/
service.go
86 lines (72 loc) · 1.95 KB
/
service.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 sqlx
import (
"os"
"path/filepath"
"strings"
"github.com/jmoiron/sqlx"
"github.com/jmoiron/sqlx/reflectx"
// _ "github.com/denisenkom/go-mssqldb" //mssql
_ "github.com/go-sql-driver/mysql" //mysql
_ "github.com/lib/pq" //postgres
// _ "github.com/mattn/go-oci8" //oracle(need to install the pkg-config utility)
// _ "github.com/mattn/go-sqlite3" //sqlite
"github.com/henrylee2cn/faygo"
)
// DBService is a database engine object.
type DBService struct {
Default *sqlx.DB // the default database engine
List map[string]*sqlx.DB // database engine list
}
var dbService = func() (serv *DBService) {
serv = &DBService{
List: map[string]*sqlx.DB{},
}
var errs []string
defer func() {
if len(errs) > 0 {
panic("[sqlx] " + strings.Join(errs, "\n"))
}
if serv.Default == nil {
faygo.Panicf("[sqlx] the `default` database engine must be configured and enabled")
}
}()
err := loadDBConfig()
if err != nil {
faygo.Panicf("[sqlx]", err.Error())
return
}
for _, conf := range dbConfigs {
if !conf.Enable {
continue
}
db, err := sqlx.Connect(conf.Driver, conf.Connstring)
if err != nil {
faygo.Critical("[sqlx]", err.Error())
errs = append(errs, err.Error())
continue
}
db.SetMaxOpenConns(conf.MaxOpenConns)
db.SetMaxIdleConns(conf.MaxIdleConns)
var strFunc = strings.ToLower
if conf.ColumnSnake {
strFunc = faygo.SnakeString
}
// Create a new mapper which will use the struct field tag "json" instead of "db"
db.Mapper = reflectx.NewMapperFunc(conf.StructTag, strFunc)
if conf.Driver == "sqlite3" && !faygo.FileExists(conf.Connstring) {
os.MkdirAll(filepath.Dir(conf.Connstring), 0777)
f, err := os.Create(conf.Connstring)
if err != nil {
faygo.Critical("[sqlx]", err.Error())
errs = append(errs, err.Error())
} else {
f.Close()
}
}
serv.List[conf.Name] = db
if DEFAULTDB_NAME == conf.Name {
serv.Default = db
}
}
return
}()