File size: 1,026 Bytes
530729e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
package db

import (
	"database/sql"
	"errors"
	"sync"

	"github.com/GoAdminGroup/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]
}