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] | |
} | |