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  }