forked from GoAdminGroup/go-admin
/
base.go
54 lines (47 loc) · 1 KB
/
base.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
package db
import (
"database/sql"
"errors"
"sync"
"github.com/dikiharyadi19/go-admin/modules/config"
"xorm.io/xorm"
)
// Base is a common Connection.
type Base struct {
DbList map[string]*sql.DB
Once sync.Once
Configs config.DatabaseList
}
// Close implements the method Connection.Close.
func (db *Base) Close() []error {
errs := make([]error, 0)
for _, d := range db.DbList {
errs = append(errs, d.Close())
}
return errs
}
// GetDB implements the method Connection.GetDB.
func (db *Base) GetDB(key string) *sql.DB {
return db.DbList[key]
}
func (db *Base) CreateDB(name string, beans ...interface{}) error {
cfg := db.GetConfig(name)
if cfg.Driver == "" {
return errors.New("wrong connection name")
}
engine, err := xorm.NewEngine(cfg.Driver, cfg.GetDSN())
if err != nil {
return err
}
defer func() {
_ = engine.Close()
}()
err = engine.Sync(beans...)
if err != nil {
return err
}
return nil
}
func (db *Base) GetConfig(name string) config.Database {
return db.Configs[name]
}