Files
bl/contrib/drivers/mysql/mysql.go
2025-06-20 17:13:51 +08:00

66 lines
1.6 KiB
Go

// Package mysql 扩展了 GoFrame 的 mysql 包,集成了 gorm相关功能.
package mysql
import (
_ "github.com/gogf/gf/contrib/drivers/mysql/v2"
"fmt"
"net/url"
"github.com/cool-team-official/cool-admin-go/cool/cooldb"
"github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/text/gregex"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type DriverMysql struct {
}
func NewMysql() cooldb.Driver {
return &DriverMysql{}
}
func (d *DriverMysql) GetConn(config *gdb.ConfigNode) (db *gorm.DB, err error) {
var (
source string
)
if config.Link != "" {
// ============================================================================
// Deprecated from v2.2.0.
// ============================================================================
source = config.Link
// Custom changing the schema in runtime.
if config.Name != "" {
source, _ = gregex.ReplaceString(`/([\w\.\-]+)+`, "/"+config.Name, source)
}
} else {
source = fmt.Sprintf(
"%s:%s@%s(%s:%s)/%s?charset=%s",
config.User, config.Pass, config.Protocol, config.Host, config.Port, config.Name, config.Charset,
)
if config.Timezone != "" {
source = fmt.Sprintf("%s&loc=%s", source, url.QueryEscape(config.Timezone))
}
if config.Extra != "" {
source = fmt.Sprintf("%s&%s", source, config.Extra)
}
}
return gorm.Open(mysql.Open(source), &gorm.Config{})
}
func init() {
var (
err error
driverObj = NewMysql()
driverNames = g.SliceStr{"mysql", "mariadb", "tidb"}
)
for _, driverName := range driverNames {
if err = cooldb.Register(driverName, driverObj); err != nil {
panic(err)
}
}
}