diff --git a/mysql/export.go b/mysql/export.go deleted file mode 100644 index 229bcaf..0000000 --- a/mysql/export.go +++ /dev/null @@ -1,48 +0,0 @@ -package mysql - -import ( - "errors" - - "mongo.games.com/game/mysql/internal" -) - -var NotInitError = errors.New("mysql manager is nil, please call Init() first") - -type Config = internal.Config -type DatabaseConfig = internal.DatabaseConfig -type Database = internal.Database - -var manager *internal.Manager - -func Init(conf *Config) error { - manager = internal.NewManager(conf) - return nil -} - -func SetAutoMigrateTables(tables []interface{}) { - if manager == nil { - return - } - manager.SetAutoMigrateTables(tables) -} - -func GetConfig() *Config { - if manager == nil { - return nil - } - return manager.GetConfig() -} - -func Close() { - if manager == nil { - return - } - manager.Close() -} - -func GetDatabase(platform string) (*Database, error) { - if manager == nil { - return nil, NotInitError - } - return manager.GetDatabase(platform) -} diff --git a/mysql/internal/mysql.go b/mysql/internal/mysql.go deleted file mode 100644 index 5aa82b5..0000000 --- a/mysql/internal/mysql.go +++ /dev/null @@ -1,150 +0,0 @@ -package internal - -import ( - "fmt" - "sync" - "time" - - "gorm.io/driver/mysql" - "gorm.io/gorm" - "mongo.games.com/goserver/core/logger" -) - -type Config struct { - Platforms map[string]*DatabaseConfig - MaxIdleConns int - MaxOpenConns int - ConnMaxLifetime int - ConnMaxIdletime int -} - -type DatabaseConfig struct { - HostName string - HostPort int32 - Database string - Username string - Password string - Options string -} - -type Database struct { - *Manager - *Config - *DatabaseConfig - *gorm.DB -} - -func (d *Database) Connect() error { - if d.DatabaseConfig == nil { - err := fmt.Errorf("mysql Connect error, DatabaseConifg not found") - logger.Logger.Error(err) - return err - } - - login := "" - if d.DatabaseConfig.Username != "" { - login = d.DatabaseConfig.Username + ":" + d.DatabaseConfig.Password + "@" - } - host := d.DatabaseConfig.HostName - if d.DatabaseConfig.HostName == "" { - host = "127.0.0.1" - } - port := d.DatabaseConfig.HostPort - if d.DatabaseConfig.HostPort == 0 { - port = 3306 - } - database := d.DatabaseConfig.Database - if database == "" { - database = "mysql" - } - myOptions := d.DatabaseConfig.Options - if myOptions != "" { - myOptions = "?" + myOptions - } - - // [username[:password]@][protocol[(address)]]/dbname[?param1=value1&...¶mN=valueN] - s := fmt.Sprintf("%stcp(%s:%d)/%s%s", login, host, port, "mysql", myOptions) - db, err := gorm.Open(mysql.Open(s), &gorm.Config{}) - if err != nil { - logger.Logger.Errorf("mysql Connect %v error: %v config:%+v", s, err, *d.DatabaseConfig) - return err - } - logger.Logger.Tracef("mysql connect success %+v", *d.DatabaseConfig) - - err = db.Exec(fmt.Sprintf("CREATE DATABASE IF NOT EXISTS %s CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci", d.DatabaseConfig.Database)).Error - if err != nil { - logger.Logger.Errorf("mysql create database %s error: %v", d.DatabaseConfig.Database, err) - return err - } - - s = fmt.Sprintf("%stcp(%s:%d)/%s%s", login, host, port, d.DatabaseConfig.Database, myOptions) - db, err = gorm.Open(mysql.Open(s), &gorm.Config{SkipDefaultTransaction: true}) - if err != nil { - logger.Logger.Errorf("mysql Connect %v error: %v config:%+v", s, err, *d.DatabaseConfig) - return err - } - - sqlDB, err := db.DB() - if err != nil { - logger.Logger.Errorf("mysql get DB error: %v", err) - return err - } - - if len(d.tables) > 0 { - if err := db.AutoMigrate(d.tables...); err != nil { - logger.Logger.Warnf("mysql migrate error: %v", err) - } - } - - sqlDB.SetMaxIdleConns(d.MaxIdleConns) - sqlDB.SetMaxOpenConns(d.MaxOpenConns) - sqlDB.SetConnMaxLifetime(time.Duration(d.ConnMaxLifetime)) - sqlDB.SetConnMaxIdleTime(time.Duration(d.ConnMaxIdletime)) - - d.DB = db.Session(&gorm.Session{SkipDefaultTransaction: true}) - - return nil -} - -type Manager struct { - conf *Config - platforms sync.Map // 平台id:Database - tables []interface{} -} - -func (m *Manager) GetConfig() *Config { - return m.conf -} - -func (m *Manager) SetAutoMigrateTables(tables []interface{}) { - m.tables = tables -} - -func (m *Manager) GetDatabase(key string) (*Database, error) { - v, ok := m.platforms.Load(key) // 平台id - if !ok { - db := &Database{ - Manager: m, - Config: m.conf, - DatabaseConfig: m.conf.Platforms[key], - } - if err := db.Connect(); err != nil { - return nil, err - } - v = db - m.platforms.Store(key, v) - } - d, _ := v.(*Database) - return d, nil -} - -func (m *Manager) Close() { - -} - -func NewManager(conf *Config) *Manager { - return &Manager{ - conf: conf, - platforms: sync.Map{}, - } -}