mirror of
https://github.com/bufanyun/hotgo.git
synced 2025-10-09 03:26:42 +08:00
66 lines
1.4 KiB
Go
66 lines
1.4 KiB
Go
package migrations
|
||
|
||
import (
|
||
"context"
|
||
"io"
|
||
"os"
|
||
"strings"
|
||
|
||
"github.com/gogf/gf/v2/frame/g"
|
||
"github.com/gogf/gf/v2/container/gvar"
|
||
)
|
||
func DoSqlContent(ctx context.Context, sqlPath string) (string, error) {
|
||
open, err := os.Open(sqlPath)
|
||
if err != nil {
|
||
return "fail", err
|
||
}
|
||
defer open.Close()
|
||
sqlContent, err := io.ReadAll(open)
|
||
if err != nil {
|
||
return "fail", err
|
||
}
|
||
|
||
// 首先尝试整个执行
|
||
_, err = g.DB().Exec(ctx, string(sqlContent))
|
||
if err != nil {
|
||
g.Log().Error(ctx, "整个执行SQL失败,尝试分句执行:", err)
|
||
|
||
// 整个执行失败,尝试按分号分割执行
|
||
sqls := strings.Split(string(sqlContent), ";")
|
||
for _, sql := range sqls {
|
||
sql = strings.TrimSpace(sql)
|
||
if sql != "" {
|
||
_, err := g.DB().Exec(ctx, sql)
|
||
if err != nil {
|
||
g.Log().Error(ctx, "执行SQL失败:", err, sql)
|
||
return "fail", err
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return "success", nil
|
||
}
|
||
|
||
func GetDbLink(ctx context.Context) *gvar.Var {
|
||
link := g.Cfg().MustGet(ctx, "database.default")
|
||
//读写分离
|
||
if !link.IsSlice() {
|
||
return g.Cfg().MustGet(ctx, "database.default.link")
|
||
}
|
||
for _, v := range link.Array() {
|
||
// 只获取主库
|
||
val := v.(map[string]interface{})
|
||
if val["role"] == "master" {
|
||
return gvar.New(val["link"])
|
||
}
|
||
}
|
||
return gvar.New("database.default.0.link")
|
||
}
|
||
|
||
func GetDbType(ctx context.Context) string {
|
||
var (
|
||
link = GetDbLink(ctx)
|
||
)
|
||
config := strings.SplitN(link.String(), ":", 2)
|
||
return config[0]
|
||
} |