hotgo/server/addons/migrations/sqlDo.go

66 lines
1.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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]
}