gitee.com/h79/goutils@v1.22.10/dao/db/sql.go (about) 1 /** 2 * @author huqiuyun 3 * 数据服务 4 */ 5 package db 6 7 import ( 8 "fmt" 9 "gitee.com/h79/goutils/common/logger" 10 commonoption "gitee.com/h79/goutils/common/option" 11 "gitee.com/h79/goutils/common/result" 12 "gitee.com/h79/goutils/dao/config" 13 "gitee.com/h79/goutils/dao/util" 14 "go.uber.org/zap" 15 ) 16 17 var _ SqlDatabase = (*sqlGroup)(nil) 18 19 type sqlGroup struct { 20 selectName string 21 dbMap map[string]*Adapter 22 } 23 24 func NewDB(cfgs []config.Sql, opts ...commonoption.Option) (SqlDatabase, error) { 25 logger.L().Info("DB", zap.Any("Config", cfgs)) 26 gr := &sqlGroup{dbMap: map[string]*Adapter{}} 27 for _, cfg := range cfgs { 28 ad, err := NewAdapter(&cfg, opts...) 29 if err != nil { 30 util.Alarm(result.ErrDbOpenInternal, "", fmt.Sprintf("Open %s DB failure server", cfg.Master.Name), err) 31 return nil, err 32 } 33 gr.dbMap[cfg.Name] = ad 34 } 35 return gr, nil 36 } 37 38 func (gr *sqlGroup) Do(dbname string, call func(db Sql) error) error { 39 if len(dbname) == 0 { 40 dbname = gr.selectName 41 } 42 db, exists := gr.dbMap[dbname] 43 if exists == true { 44 return call(db) 45 } 46 return result.Errorf(result.ErrDbExistInternal, "'%s' database not exist,please check config!", dbname) 47 } 48 49 func (gr *sqlGroup) Get(dbname string) (Sql, error) { 50 if len(dbname) == 0 { 51 dbname = gr.selectName 52 } 53 if db, exists := gr.dbMap[dbname]; exists == true { 54 return db, nil 55 } 56 return nil, result.Error(result.ErrNotFound, "Not found") 57 } 58 59 func (gr *sqlGroup) Close(dbname string) { 60 if len(dbname) == 0 { 61 dbname = gr.selectName 62 } 63 db, exists := gr.dbMap[dbname] 64 if exists == true { 65 db.Close() 66 } 67 } 68 69 func (gr *sqlGroup) CloseAll() { 70 for _, db := range gr.dbMap { 71 db.Close() 72 } 73 gr.dbMap = nil 74 } 75 76 func (gr *sqlGroup) Select(name string) { 77 gr.selectName = name 78 } 79 80 func (gr *sqlGroup) GetSelector() string { 81 return gr.selectName 82 }