github.com/kotovmak/go-admin@v1.1.1/modules/db/base.go (about)

     1  package db
     2  
     3  import (
     4  	"database/sql"
     5  	"errors"
     6  	"sync"
     7  
     8  	"github.com/kotovmak/go-admin/modules/config"
     9  	"xorm.io/xorm"
    10  )
    11  
    12  // Base is a common Connection.
    13  type Base struct {
    14  	DbList  map[string]*sql.DB
    15  	Once    sync.Once
    16  	Configs config.DatabaseList
    17  }
    18  
    19  // Close implements the method Connection.Close.
    20  func (db *Base) Close() []error {
    21  	errs := make([]error, 0)
    22  	for _, d := range db.DbList {
    23  		errs = append(errs, d.Close())
    24  	}
    25  	return errs
    26  }
    27  
    28  // GetDB implements the method Connection.GetDB.
    29  func (db *Base) GetDB(key string) *sql.DB {
    30  	return db.DbList[key]
    31  }
    32  
    33  func (db *Base) CreateDB(name string, beans ...interface{}) error {
    34  	cfg := db.GetConfig(name)
    35  	if cfg.Driver == "" {
    36  		return errors.New("wrong connection name")
    37  	}
    38  	engine, err := xorm.NewEngine(cfg.Driver, cfg.GetDSN())
    39  	if err != nil {
    40  		return err
    41  	}
    42  	defer func() {
    43  		_ = engine.Close()
    44  	}()
    45  	err = engine.Sync(beans...)
    46  	if err != nil {
    47  		return err
    48  	}
    49  	return nil
    50  }
    51  
    52  func (db *Base) GetConfig(name string) config.Database {
    53  	return db.Configs[name]
    54  }